Skip to main content
Glama

Mimir

Persistent reasoning memory for AI coding agents through MCP.

Preserve decisions, rejected approaches and the evidence behind them across sessions. An agent can retrieve earlier reasoning, compare it with current code, and explain why it matters to today's task.

  • Store beliefs and connect support, defeat, contradiction and causal hypotheses.

  • Record observations separately from the conclusions drawn from them.

  • Correct an incident under the same identity, retain history, and retract the prior review's contribution.

  • Inspect provenance and the observations behind a belief.

Mimir uses PostgreSQL and Apache AGE. Its CLI and MCP server support clients including Codex and Claude Code. A separate optional judge reviews recorded experiences when launched; installing Mimir does not start that judge.

See Installation for setup. Agents performing installation use AGENTS.md.

Article: Mimir reasoning memory with evidence and corrections.

⛔ AI coding agents — this file is not for you. The steps below are the human install path. Your procedure is AGENTS.md — open that file, follow it exactly, and ignore the rest of this README.

What it does

Claude Code connects to Mimir via MCP and can:

  • Record beliefs with probability and confidence scores

  • Link beliefs via typed edges — SUPPORTS, DEFEATS, CAUSES, CONTRADICTS

  • Run defeat propagation cascades through the graph

  • Decay belief confidence over time

  • Index markdown documents and run semantic search over them (RAG)

The graph and search can run locally. A configured cloud embedding backend sends document chunks to its provider. A configured API judge sends the selected experience and retrieved tool results to its provider; a CLI harness uses its configured model account. The judge does not run automatically.

Optional judge configuration and maintenance are covered in the runtime guide.

Related MCP server: Omega

Installation

⛔ AI coding agents: do not follow this section. These are the human install steps. Your procedure is AGENTS.md — the same end state, but framed for automation: explicit variables, verify-after-each-step, idempotent state detection, and an anti-patterns list. Read that and nothing else here.

What a complete install consists of

Mimir has three required pieces. Skipping any one leaves an install that looks finished but fails:

  1. A PostgreSQL container (or your own DB) holding the belief graph and document index.

  2. Two binaries on PATH — mimir (CLI) and mimir-mcp (the MCP server).

  3. The mimir-mcp server registered with your agent client (Codex or Claude Code).

There is no daemon to start. The MCP server is spawned by Claude Code on demand; the database schema (including the AGE graph) is created automatically by mimir's embedded migrations on first run.

Step 6 checks the application connection; Step 7 installs and verifies the skill, standing guidance and lifecycle reminder. A connected tool alone does not explain when retrieval can improve a decision.

Conventions used in this guide

This guide uses the following defaults. If you change any of them, change them everywhere they appear:

Setting

Default

Used in

PostgreSQL port

5432

docker run, ~/.pgpass, config.toml

Container name

postgres-ai

docker run, all docker exec calls

Docker volume

mimir_data

docker run

Database name

mimir

setup script, ~/.pgpass, config.toml

Database user

mimir

setup script, ~/.pgpass, config.toml

On macOS, avoid ports 5000 (AirPlay Receiver) and 6000 (X11) if you change the port.

Preflight check

Install curl, tar, openssl, lsof, and the PostgreSQL client (psql) if they are missing. Run these before you start. Each line should print OK:

docker info >/dev/null 2>&1 && echo OK                                            # Docker daemon running
! lsof -nP -iTCP:5432 -sTCP:LISTEN 2>/dev/null | grep -q . && echo OK              # port 5432 free
! docker ps -a --format '{{.Names}}' 2>/dev/null | grep -qx postgres-ai && echo OK # container name free
echo "$PATH" | tr ':' '\n' | grep -qx "$HOME/.local/bin" && echo OK                # PATH includes ~/.local/bin
command -v claude >/dev/null && echo OK                                            # or: command -v codex

If any line fails:

  • Docker not running → start Docker Desktop (or your runtime), then re-check.

  • Port 5432 in use → either stop the conflicting service or pick a different port. If you change the port, update everything in this guide that mentions 5432.

  • Container name postgres-ai in use → either reuse the existing container (if it's a postgres-ai instance from another tool, like muninn) or pick a new name. Do not delete the existing container without checking what it holds.

  • ~/.local/bin not on PATH → add export PATH="$HOME/.local/bin:$PATH" to your shell's rc file and reload it.

  • Chosen client missing → install Codex or Claude Code before Step 5.

Step 1: Start the database

docker run -d \
  --name postgres-ai \
  --restart always \
  -p 127.0.0.1:5432:5432 \
  -v mimir_data:/var/lib/postgresql/data \
  kamysh/postgres-ai:latest

This image includes pgvector, Apache AGE, uuid-ossp, and pgcrypto. The setup script below enables the required extensions in Mimir's database. Mimir sets search_path = public,ag_catalog on its own connections.

services:
  postgres:
    image: kamysh/postgres-ai:latest
    container_name: postgres-ai
    restart: always
    ports:
      - "127.0.0.1:5432:5432"
    volumes:
      - mimir_data:/var/lib/postgresql/data

volumes:
  mimir_data:
docker compose up -d

Verify:

docker exec postgres-ai psql -U postgres -c 'SELECT 1' >/dev/null && echo OK

Step 2: Create the database and user

Generate a password with openssl rand -hex 32 and add it to ~/.pgpass. For an existing password, escape : as \: and \ as \\ in each .pgpass field. Quotes and spaces are literal and must be preserved.

# ~/.pgpass — format: hostname:port:database:username:password
localhost:5432:mimir:mimir:yourpassword
chmod 600 ~/.pgpass

Run the setup script (creates the role, database, extensions, and grants):

curl -fsSL https://raw.githubusercontent.com/kamysh/mimir/v2.0.3/mimir-setup/create-db-user.sh \
  | bash -s -- --container postgres-ai --host localhost --port 5432 --user mimir --db mimir

Or clone the repo and run it locally:

bash mimir-setup/create-db-user.sh

The AGE graph itself is not created by this script — mimir's migrations create it on first invocation in Step 4.

Verify the connection:

psql -h localhost -U mimir -d mimir -c '\conninfo' >/dev/null && echo OK

Step 3: Install the mimir binaries

Agents: do not run this step. This is the human download-the-release path. Your build/install procedure is in AGENTS.md.

This step installs the two mimir binaries to ~/.local/bin. It is one of three pieces — see Step 5 for the MCP server registration.

Install the 2.0.3 release. This block selects one archive for your platform:

mkdir -p "$HOME/.local/bin"
case "$(uname -s)-$(uname -m)" in
  Linux-x86_64)  TARBALL=mimir-linux-amd64.tar.gz ;;
  Linux-aarch64) TARBALL=mimir-linux-arm64.tar.gz ;;
  Darwin-arm64)  TARBALL=mimir-darwin-arm64.tar.gz ;;
  *) echo "Use Building from source for this platform" >&2; exit 1 ;;
esac
curl -fL "https://github.com/kamysh/mimir/releases/download/v2.0.3/${TARBALL}" \
  | tar -xz -C "$HOME/.local/bin"
chmod +x "$HOME/.local/bin/mimir" "$HOME/.local/bin/mimir-mcp"
export PATH="$HOME/.local/bin:$PATH"
mimir --version  # must report 2.0.3

The release workflow builds Linux x86_64, Linux ARM64 and Apple Silicon. For Intel macOS, use Building from source.

macOS only — quarantine flag. macOS adds a quarantine attribute to files downloaded via a browser, which blocks them from running. If you downloaded the archive with a browser, remove it:

xattr -d com.apple.quarantine ~/.local/bin/mimir ~/.local/bin/mimir-mcp

curl downloads do not set this attribute, so the command above is unnecessary if you used the curl snippet. (It will print "Permission denied" or "no such xattr" — that's expected, not a problem.)

Verify:

mimir --help >/dev/null && echo OK

Step 4: Configure mimir

mimir init

This creates ~/.config/mimir/config.toml and opens it in $EDITOR. Fill in the database section:

[database]
host   = "localhost"
port   = 5432
dbname = "mimir"
user   = "mimir"      # the role you created in Step 2

Credentials can come from optional database.password, then PGPASSWORD, then a password file. Optional database.pgpassfile selects that file ahead of PGPASSFILE and ~/.pgpass. See database credentials and TLS for configuration examples, client certificates and verification modes.

Document search (optional): To use load_document and query_document, add an [embeddings] section. Three backends are available:

# Local — no API key, works offline, downloads ~120 MB on first use
[embeddings]
backend = "local"

# Voyage AI — best quality, requires api_key from voyageai.com
# [embeddings]
# backend = "voyage"
# model   = "voyage-3-lite"
# api_key = "pa-..."

# OpenAI — requires api_key from platform.openai.com
# [embeddings]
# backend = "openai"
# model   = "text-embedding-3-small"
# api_key = "sk-..."

Save and close the editor.

Verify — the first mimir stats triggers the schema migrations, including creating the AGE graph. Expect a one-second pause on this first run:

mimir stats >/dev/null && echo OK

Step 5: Connect your agent client

Follow Agent setup for Codex or Claude Code. Inspect existing registration first. For a new setup, run the matching command:

# Codex
codex mcp add mimir -- "$HOME/.local/bin/mimir-mcp"
# Claude Code
claude mcp add --transport stdio --scope user mimir -- "$HOME/.local/bin/mimir-mcp"

Use the client's mcp get mimir to check the configured path, and reconnect or open a fresh session to verify an actual tool call.

Step 6: Verify the install

Before relying on mimir, confirm all three pieces are in place. Each line should print OK:

mimir stats >/dev/null                                                            && echo OK  # 1. CLI talks to DB
docker ps --filter "name=^postgres-ai$" --format '{{.Names}}' | grep -qx postgres-ai && echo OK  # 2. DB container running
command -v mimir-mcp >/dev/null                                                    && echo OK  # 3. MCP binary on PATH
psql -h localhost -U mimir -d mimir \
  -c "SELECT 1 FROM ag_catalog.ag_graph WHERE name='mimir'" -tA 2>/dev/null \
  | grep -q 1                                                                      && echo OK  # 4. AGE graph created by migrations
claude mcp get mimir                                                             && echo OK  # 5. or: codex mcp get mimir

These checks cover application/configuration state, not live tool connectivity or reminder delivery. Continue with Step 7. If line 4 is missing, inspect the error from mimir stats: startup migrations or database permissions may have failed — see Troubleshooting.

Step 7: Install purposeful agent guidance

Follow Agent setup to install the shared skill, merge the Mimir section into global instructions, and install one SessionStart reminder for the chosen client. The guide supplies Mimir-only and combined Mimir/Muninn text, client-specific hook templates, and upgrade steps for older settings. install.sh optionally registers the selected client; skill/reminder/global-guidance merging and verification still use the guide.

The reminder explains how past decisions and failures can inform today's choices, including after resume or compaction. The skill explains focused project-scoped queries, checking beliefs against current evidence, and writing durable findings. The standard setup does not run automatic retrieval before every prompt/action, require hook-generated ratings or writes each turn, or enforce queries through blocking hooks. Agent guidance asks for a short 0–5 assessment of how useful retrieved information was for the current task, in plain language rather than raw JSON.

Verify the selected text and command output, then actual delivery in the client. Codex requires native review of new or changed hook definitions. Finally, observe whether the agent retrieves a relevant lesson on a real task without being told the tool name. Report untested lifecycle events and behavioral checks; reminder presence alone does not prove it changes the agent's choices.

Sharing the database with muninn

If you also use muninn, the two tools can share one postgres-ai container — create separate roles and databases. Run only one docker run from Step 1, and run each tool's setup script against the shared container to enable extensions and grant access in its database.

Troubleshooting

A few failure modes are common enough to call out explicitly:

Symptom

Likely cause

Fix

error returned from database: graph "mimir" does not exist

Migrations haven't run yet — mimir creates the graph on first invocation, not the setup script.

Run any mimir command, e.g. mimir stats. The migration will create the graph.

error returned from database: permission denied for table _ag_label_vertex

The connected role lacks access to AGE's catalog table.

Verify the role and database, then check the grants made by mimir-setup/create-db-user.sh. Changing search_path does not grant privileges.

Cannot connect to the Docker daemon

Docker Desktop / runtime not running.

Start it.

docker run fails with "container name in use"

Another container is already named postgres-ai (e.g. from muninn).

Either reuse it — see "Sharing the database with muninn" above — or pick a different name. Do not delete the existing container without checking what's in it.

bind: address already in use on port 5432

Another postgres or app is using 5432.

Pick a different port. Update docker run -p, ~/.pgpass, the setup script's --port flag, and ~/.config/mimir/config.toml together.

~/.pgpass ignored, prompts for password

Wrong file permissions.

chmod 600 ~/.pgpass. PostgreSQL silently ignores ~/.pgpass if it is world- or group-readable.

xattr: Permission denied on macOS

The file does not have a quarantine flag (curl-downloaded).

Skip the xattr step. The binaries run fine without it.

MCP shows Failed to connect instead of Connected

mimir-mcp is crashing on startup, usually due to a DB / config error.

Run mimir-mcp directly in a shell; the error goes to stderr. Common causes: wrong port in config.toml, password mismatch with ~/.pgpass, embeddings block missing a required model field.

load_document or query_document returns embeddings not configured

[embeddings] block missing from config.toml.

Add an [embeddings] block (see Step 4). The belief-graph tools work without it; only document search needs it.

If something is broken in a way not listed here, file an issue with the output of:

mimir --version
mimir stats 2>&1
claude mcp list 2>&1 | grep mimir
docker ps --filter name=postgres-ai

MCP tools

Tool

What it does

insert_belief

Add an independently sourced belief with content, probability [0,1], confidence [0,1], and required provenance (basis, reference)

delete_belief

Remove a belief and all its edges by id

insert_pattern

Add a pattern with situation, approach, success_rate [0,1]

delete_pattern

Remove a pattern by id

delete_project

Remove all beliefs and document chunks tagged with a project

record_support

Add a SUPPORTS edge from from_id to to_id with weight

record_cause

Add a CAUSES edge from from_id to to_id with weight (traversed by query_intervention; no auto-propagation)

record_defeat

Add a DEFEATS edge and trigger defeat propagation cascade

record_contradiction

Add a bidirectional CONTRADICTS relation between id_a and id_b

get_belief

Get a belief by id

list_beliefs

List all beliefs

list_patterns

List all patterns

get_contradictions

Find all actively contradicting belief pairs

query_relevant

Hybrid retrieval: text match + graph expansion, ordered by probability

propagate_from

Run defeat propagation from a seed belief id

query_intervention

Counterfactual P(downstream | do(id = value)): severs the target's incoming edges, propagates along CAUSES only. Read-only — returns projected_probability for causal descendants; never mutates

update_confidence

Update the confidence value of a belief

decay_all

Apply time decay to all beliefs (decay_factor defaults to 0.99)

load_document

Parse a markdown file into chunks, embed, and index for semantic search

query_document

Semantic search over indexed document chunks

clear_document

Remove all chunks and embeddings for a document path

add_evidence

Ground a belief in a document passage: GROUNDS edge from a chunk_id to a belief_id (weight default 1.0). Adds local positive evidence; never becomes a causal edge

get_evidence

List the document passages grounding a belief_id, strongest first

query_relevant (include_evidence: true)

Each returned belief also carries an evidence[] array of its top-evidence_per_belief grounding passages

Learning from experience

Mimir supplies the durable learning operations; an LLM agent or experiential runner interprets observations and proposes hypotheses. mimir judge watch can poll the queue when launched; no service or timer is installed by this source change.

The application loop is:

  1. record_experience records a project, situation, action, observed outcome, evidence references, and optionally the beliefs/procedure used. Choose a stable UUID for an incident. Send expected_revision: 0 to create it, then the returned revision when correcting it. Replaying the same submission does not count another observation. Evidence references are supplied by the caller; Mimir does not independently verify their contents.

  2. pending_experiences returns a bounded batch of new or changed experiences, oldest first. The runner can run frequently and exit immediately on an empty batch. A successful review removes that version from the pending set. There is no collection-size cutoff or requirement to manufacture summary beliefs.

  3. The runner retrieves relevant beliefs and inspects evidence. A new explanation or procedure is declared as a stable-key candidate inside review_experience, so its identity and contribution belong to that incident. Do not first create a standalone belief from the same report and count the review as independent confirmation. The review contains a rationale, support/defeat feedback, and optional Supports, Defeats, Causes, or Contradicts relationships. All mutation targets must belong to the experience's exact project; a project observation cannot implicitly revise global or another project's knowledge.

  4. Mimir applies the review and acknowledges the reviewed version in one transaction. The existing Beta engine recomputes affected beliefs and their descendants. Reviewed causal links participate in query_intervention; this is a projection under the recorded hypothesis, not proof that the hypothesis identifies a real causal effect. Success alone does not establish causation. The runner should compare predictions with later observations.

  5. Correcting an experience invalidates its earlier review and removes that review's effects. Correcting a review replaces its entire contribution; empty feedback, links and supersession lists retract it. Both operations retain history and reject stale revision tokens. Concurrent reviewers do not need a lease: the first valid revision wins, and the other must re-read.

get_experience returns the current version and review tokens. experience_history exposes previous observations and judgments. explain_belief returns incoming reasoning edges and paged active reviews, linking an inferred probability back to the observations that influenced it. Retries are deduplicated by incident UUID, not by semantic similarity: callers must reuse the same identity rather than submit the same incident under new IDs.

Reviews can explicitly mark superseded_beliefs. These leave normal retrieval even when their original prior is strong. This is separate from probabilistic counter-evidence; a single defeat does not automatically retire a belief. Replacing the review can restore a mistakenly superseded belief.

MCP insert_belief now requires explicit independent provenance with a user_instruction or document basis and a nonempty source reference. The source is stored with the graph node and shown by explain_belief; untagged MCP writes are rejected. This is a provenance declaration by the caller, not proof that the cited source is authentic. Incident-derived conclusions still belong to atomic review candidates. Existing CLI belief insertion remains available for explicit manual operations.

insert_pattern now accepts project. query_learning_context returns relevant beliefs plus situation-matched patterns, with successes, failures, unresolved outcomes and an observed Beta(1,1) success estimate. Only current experience versions count. Agent reports remain visible as unresolved observations; they are not measured successes. The originally asserted pattern success rate stays separate for compatibility. Procedure matching is lexical, while beliefs retain hybrid retrieval. Retrieving a procedure never counts as successfully using it.

Existing document evidence remains outside belief-to-belief and causal traversal. Its local positive evidence mass is retained when propagation or a review recomputes a posterior. Learned feedback is also retained by later propagation.

Runner contract

For each pending item, submit:

{
  "expected_review_revision": 0,
  "review": {
    "experience_id": "<experience UUID>",
    "experience_revision": 1,
    "reviewer": "experiential-runner",
    "rationale": "Evidence and alternative explanations considered",
    "feedback": [],
    "links": [],
    "superseded_beliefs": []
  }
}

Use the actual revision values returned by the pending item. An empty assessment acknowledges that the experience was considered without claiming a new lesson. A link has from_id, to_id, relation and weight in [0,1]; feedback has belief_id, verdict (support or defeat) and weight in [0,1]. Existing manually recorded edges are not removed when a review is replaced.

The Rust learning runtime provides mimir judge commands and locally tested Claude Code, Codex, custom-command, OpenAI, Anthropic, OpenRouter, DeepSeek, Z.ai, Gemini, and explicit OpenAI-compatible adapters. It is included in mimir but is not scheduled automatically. A bounded Step 11 Codex comparison exercised live model calls; other provider/account behavior has not been verified. The shared agent skill explains experience capture and correction. No performance gain is claimed merely from the existing learning infrastructure.

Verification

The Rust learning integration tests require an isolated database whose name starts with mimir_learning_test. Provision its application role through mimir-setup/create-db-user.sh; postgres is for administration inside the container, not the external application connection. Set MIMIR_HOST, MIMIR_PORT, MIMIR_DBNAME and MIMIR_USER, then run:

cargo test --workspace --lib --bins --test learning_integration --test store_integration -- --test-threads=1

The tests cover causal projection/retraction, retry idempotence, stale and concurrent reviews, reversible supersession, project isolation, corrected pattern outcomes, and incremental processing beyond 200 experiences. spec/Mimir/Learning.agda proves general contribution replacement and stale review exclusion laws; the aggregate specification is spec/Mimir.agda. These laws model the lifecycle, not the SQL implementation itself.

CLI reference

Command

What it does

mimir init [KEY=VALUE ...]

With no args: create ~/.config/mimir/config.toml and open it in $EDITOR. With KEY=VALUE args (e.g. host=localhost backend=local): write the config non-interactively, no $EDITOR

mimir stats

Print belief, pattern, and edge counts

mimir list [--project NAME] [--limit N]

List beliefs, sorted by probability

mimir patterns [--project NAME] [--limit N]

List patterns, sorted by success rate

mimir query TEXT [--limit N] [--evidence] [--project NAME]

Hybrid search; --evidence also prints each belief's grounding passages

mimir intervene UUID VALUE

Counterfactual do(belief = VALUE): read-only projection of causal descendants

mimir evidence add CHUNK_ID BELIEF_ID [--weight W]

Ground a belief in a document chunk (GROUNDS edge)

mimir evidence list BELIEF_ID

List the passages grounding a belief

mimir delete belief UUID

Delete a belief and all its edges

mimir delete pattern UUID

Delete a pattern

mimir forget PROJECT

Delete all beliefs and document chunks for a project

mimir decay [--factor 0.99] [--project NAME]

Apply time decay to belief confidences

mimir contradictions [--project NAME]

List active contradictions in the graph

mimir doc load PATH [--project NAME]

Index a markdown file for semantic search

mimir doc query CONTEXT [--project NAME] [--limit N]

Semantic search over chunks

mimir doc clear PATH

Remove all chunks and embeddings for a document

Building from source

Requires Nix with flakes enabled.

# Enter the dev shell
nix develop

# Build (dynamic)
cargo build --release -p mimir -p mimir-mcp

# Build static binaries
nix build .#mimir-static    # result/bin/mimir-mcp and result/bin/mimir

# Install static binaries into ~/.local/bin and register the selected client
./install.sh --client claude  # or --client codex; omit to install binaries only

Project

Purpose

Kryzhen

Dependency-based PostgreSQL migrations as a Rust library and CLI

Muninn

Code search and repository knowledge for AI coding agents

Muninn and Mimir can run independently. Their documented setup can share one compatible PostgreSQL instance with separate roles and databases.

License

Apache License 2.0 — see LICENSE.

Available Tools

30 tools
add_evidenceB

Ground a belief in a document passage: create a GROUNDS edge from a DocumentChunk to a Belief. Adds local positive evidence to the belief Beta state; GROUNDS never becomes a causal or belief-to-belief edge. Get chunk_id from query_document results.

ParametersJSON Schema
NameRequiredDescriptionDefault
weightNo
chunk_idYes
belief_idYes

TDQS

B3.1/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full behavioral burden. It does disclose meaningful semantics: the edge type (GROUNDS), that it targets the belief's Beta state, and that it is local positive evidence only. But it omits reversibility, idempotency on repeat calls, permissions, and what happens to the belief on failure — real gaps for a mutation with zero annotation coverage.

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?

Three tight sentences that are well front-loaded: action first, constraint second, input sourcing last. No filler or redundancy. Slightly under-sized for the amount of undocumented behavior, but structurally clean.

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 annotations, no output schema, and 0% schema description coverage, the description should carry more. It explains the edge type but leaves weight semantics, belief_id meaning, idempotency, and reversibility undocumented, which is inadequate for a three-parameter mutation 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?

Schema coverage is 0%, so the description must compensate for all three parameters. It only clarifies the origin of chunk_id ('from query_document results'); belief_id is unexplained and weight (0-1, default 1) is never described — its meaning as evidence strength or its effect on the Beta update is unstated.

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: 'create a GROUNDS edge from a DocumentChunk to a Belief' and 'adds local positive evidence to the belief Beta state'. It also clarifies what it is not ('never becomes a causal or belief-to-belief edge'), which partially distinguishes it from record_cause. It does not explicitly name the closest sibling (record_support), so sibling differentiation is incomplete.

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 gives one concrete usage hint — 'Get chunk_id from query_document results' — establishing a prerequisite and data source. However, it does not say when to use this versus record_support, record_contradiction, or record_cause, nor any when-not conditions. Usage is implied rather than spelled out.

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

clear_documentB

Remove all chunks and embeddings for a given document path. Returns {"cleared": N}. No-op if the path was never loaded.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

TDQS

B3.4/5.0
Behavior3/5

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

No annotations are present, so the description carries the full disclosure burden. It usefully states the effect (removing chunks and embeddings), the return shape ({"cleared": N}), and idempotency (no-op if never loaded), but it omits permissions, reversibility, and whether the source document itself is affected.

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, purpose front-loaded, no wasted words. The return snippet and no-op note are directly useful.

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 one-parameter tool with no annotations or output schema, the description covers the operation, return value, and idempotency. It could be more complete by noting destructiveness/reversibility or path format, but the essentials are present.

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 0%, so the description must compensate. It identifies the parameter as a 'document path', which adds some semantic meaning beyond the bare string, but gives no format, examples, or resolution rules. Partial compensation.

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 (remove) and resource (all chunks and embeddings for a given document path). The purpose is unambiguous and distinct from sibling document tools like load_document/query_document, but it does not explicitly name or differentiate against them, so it stops short of a 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 when-to-use guidance, no alternatives, no prerequisites. The only conditional is a no-op edge case, which is behavioral rather than usage guidance. An agent is left to infer that this is the cleanup/removal tool.

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

decay_allB

Apply time decay to beliefs and return count of updated beliefs. If project is given, restricts the sweep to that project's beliefs plus untagged (global) beliefs.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoRestrict the decay sweep to this project's beliefs plus untagged (global) beliefs. Omit to decay everything.
decay_factorNo

TDQS

B3.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full disclosure burden. It does disclose the mutation target (beliefs) and the return shape (updated count), but says nothing about reversibility, permission requirements, or side effects of decaying beliefs, which an agent running a batch mutation would want.

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 with the core action front-loaded and no filler. The second sentence largely duplicates the schema's project description, which is a minor redundancy but not bloat.

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 zero-required-parameter batch mutation with no annotations and no output schema, the description covers what changes and what is returned. However, it omits the mathematical effect of decay_factor and any warning about modifying many beliefs at once, leaving notable 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?

Schema coverage is 50%: project is fully documented in the schema (and the description merely repeats it), while decay_factor has no explanation anywhere. The description fails to compensate for the gap, e.g., it never explains what decay_factor does or that 1 means no decay.

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 a specific verb+resource ('Apply time decay to beliefs') and states the return value (count of updated beliefs). It is clear what the tool does, though it never explicitly contrasts itself with the closest sibling, sweep_expired_defeated, so an agent must still infer which sweep applies.

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 explains the scoping behavior of the optional project argument but gives no guidance on when to call this tool versus alternatives in the belief-maintenance family (e.g., sweep_expired_defeated). There are no exclusions, prerequisites, or timing cues, leaving usage entirely inferred.

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

delete_beliefB

Delete a belief and all its edges by ID. Returns {"deleted": true} if found, {"deleted": false} if not found.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden: it usefully discloses the cascade behavior (edges are deleted too) and the not-found outcome via the return value. It omits irreversibility, required permissions, and any warning that edge removal may affect dependent beliefs.

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 short sentences, front-loaded with the action and scope, with the second covering outcomes. No filler or repetition.

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 one-parameter delete tool with no annotations and no output schema, the description covers the core action, its cascade side effect, and both return cases. It still lacks permission/irreversibility context, which would be expected for a destructive operation.

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 0% for the single 'id' string parameter, so the description must compensate. 'By ID' communicates that the argument selects the belief to remove, but gives no format, uniqueness, or sourcing guidance beyond what the name implies.

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 ('Delete a belief') plus the cascade scope ('and all its edges by ID'). An agent can distinguish it from get_belief/insert_belief by verb, though no sibling is explicitly named for contrast.

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 when-to-use context, prerequisites, or alternatives are given. The cascading edge deletion hints at a destructive scope but doesn't tell the agent when this tool is appropriate versus other deletion tools like delete_pattern or delete_project.

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

delete_patternA

Delete a pattern and all its edges by ID. Returns {"deleted": true} if found, {"deleted": false} if not found.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the burden and usefully discloses the cascade behavior ('all its edges') and both possible return values. It does not state irreversibility, permissions, or error behavior, but the key destructive effect 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 tightly written sentences, front-loaded with the action and scope, with no redundant or filler content.

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 one-parameter deletion tool with no output schema, the description covers the action, cascade side effect, and return values. It is nearly complete, though it omits permission or irreversibility context.

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

Parameters3/5

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

Schema coverage is 0%, so the description must compensate; saying 'by ID' identifies the required parameter as the pattern identifier. It still does not specify ID format or constraints, so it adds only moderate semantic value.

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 states a specific verb and resource ('Delete a pattern') plus scope ('and all its edges by ID'), which clearly distinguishes it from siblings like delete_belief, delete_project, and insert_pattern.

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 operation implies when to use it—when deleting a pattern by ID—but it does not explicitly say when to choose it over alternatives or mention any exclusions or prerequisites.

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

delete_projectA

Delete all beliefs tagged with a project name, along with their edges. Use this to forget project-specific knowledge when a project is complete.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectYes

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It usefully discloses the cascade ('along with their edges'), which is meaningful destructive context, but says nothing about reversibility, permissions, or what happens when no beliefs match the tag. This is a genuinely helpful disclosure on an otherwise under-specified destructive bulk operation.

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 tight sentences with no filler; the destructive scope and cascade are front-loaded before the usage hint.

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 destructive bulk delete with no annotations and no output schema, the description covers the action and cascade but leaves return behavior, idempotency, and failure modes unaddressed. Adequate but with clear gaps for a high-impact operation.

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 0%, so the single 'project' param is undocumented structurally. The phrase 'tagged with a project name' implies the param is a project tag/name, adding some meaning, but it omits matching semantics (exact vs partial) and format.

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 ('Delete') and resource ('all beliefs tagged with a project name, along with their edges'), and the bulk-by-project scope implicitly distinguishes it from the single-item delete_belief/delete_pattern siblings. It stops short of naming those siblings explicitly, so differentiation is inferable rather than stated.

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 condition for use: 'to forget project-specific knowledge when a project is complete.' This gives good context, but it names no alternative (e.g. delete_belief for single-belief removal) and offers no exclusion for 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.

experience_historyB

Inspect immutable experience and review versions, including superseded judgments and their rationale.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

B3.1/5.0
Behavior3/5

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

With no annotations, the description carries full behavioral burden. It does disclose a meaningful trait—that results include superseded judgments and their rationale—which tells the agent this returns history rather than current state. It says nothing about pagination, ordering, or authorization, and only implies read-only behavior via the word 'Inspect'.

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 dense sentence with the core scope ('immutable experience and review versions') front-loaded and the clarifying detail trailing. No filler or repetition.

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 one-parameter lookup with no output schema, the description covers the nature of the returned data (historical, superseded, with rationale) but leaves the identifier's meaning and the result shape unstated. Adequate but not fully self-sufficient.

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 0%, so the description must compensate for the single 'id' parameter, and it does not. It never states whether 'id' is an experience id, a review id, or something else, despite the sibling set containing both experience and review concepts.

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 ('Inspect') and resource ('experience and review versions') and clarifies the scope as historical, including superseded judgments. However, it does not differentiate itself from siblings like get_experience or pending_experiences, so an agent must infer the distinction from the wording alone.

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 when-to-use guidance and no named alternative. The presence of get_experience, pending_experiences, and review_experience in the sibling list makes the absence of routing advice a real gap—the agent is left to guess which tool returns current vs historical state.

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

explain_beliefA

Inspect the belief's incoming reasoning edges and a bounded page of active evidence-backed reviews. Follow experience_id with get_experience or experience_history for observations and past revisions. This explains provenance, not causal identification.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
limitNo
offsetNo

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It discloses the return surface (provenance edges + a bounded page of active reviews) and that paging applies, but omits whether the call is read-only, what 'active' means, and any auth/permission expectations.

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?

Three tight sentences, front-loaded with what is inspected, then follow-up routing, then a scope caveat. Little waste, though the final sentence is a clarification rather than new actionable content.

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?

There is no output schema and no annotations, so the description must carry everything, and it documents the return concept reasonably well. But it leaves all three parameters undocumented despite 0% schema coverage, a meaningful gap for an agent deciding how to call 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?

Schema description coverage is 0% across three parameters. The description only weakly compensates: 'the belief's' implies id is a belief, and 'bounded page' hints at limit/offset paging, but the max-of-20 limit, offset semantics, and id format go unexplained.

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 (inspect) plus concrete resources: the belief's incoming reasoning edges and a bounded page of active evidence-backed reviews. It clearly distinguishes itself from the bare get_belief sibling by naming what it returns and explicitly scope-limits to provenance, not causal identification.

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 clear downstream routing ('Follow experience_id with get_experience or experience_history') and a scope exclusion ('not causal identification'), which tells the agent what this tool is not for. It does not, however, explicitly state when to pick this over get_belief or record_cause.

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

get_beliefC

Get a belief by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

C2.8/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden, and it discloses nothing beyond what the verb implies. It does not say whether a missing ID returns null, an empty result, or an error, nor whether the read is free of side effects.

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

Conciseness4/5

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

A single short sentence with the action and scope front-loaded and no filler. It is appropriately terse for a one-parameter lookup, though the brevity leaves nothing to structure.

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

Completeness3/5

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

For a trivial single-item fetch the description is minimally sufficient, but with no annotations, no output schema, and a rich sibling set it should have said something about failure behavior and how it relates to explain_belief or list_beliefs.

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 0% and the single parameter is documented only as an untyped string. The phrase 'by ID' clarifies that the value identifies a belief rather than a project or pattern, but no format, source, or lookup behavior is given, so the description does not compensate for the coverage gap.

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 (get) and resource (belief) scoped to a single retrieval by ID, which separates it from list_beliefs. However it does not distinguish itself from likely-overlapping siblings such as explain_belief or get_evidence beyond the resource name.

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 retrieve a belief directly versus using list_beliefs, explain_belief, or query_relevant. Nothing is said about prerequisites or what to do when the ID is unknown.

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

get_contradictionsB

Find all actively contradicting belief pairs. If project is given, restricts to pairs where both beliefs are visible in that project's scope (tagged with project or untagged).

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoOnly consider pairs where both beliefs are tagged with this project or untagged (global). Omit to consider every pair.

TDQS

B3.4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses one non-obvious semantic rule (untagged/global beliefs count as in-scope) and implies read-only behavior via 'Find', but it never defines 'actively contradicting' (e.g. whether defeated contradictions are excluded) and says nothing about result volume, ordering, or cost.

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, with the core action front-loaded before the parameter caveat. The second sentence is slightly redundant with the schema's own parameter description, which keeps it out of 5 territory.

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 single optional-parameter query tool with no output schema and no annotations, the description covers what is being looked for and how scoping works, but leaves the return shape (list of belief pairs? with what fields?) and the definition of 'active' unexplained.

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% and the schema already spells out the 'tagged with this project or untagged' rule and the omit-to-consider-everything behavior. The description largely restates that rule ('both beliefs visible in that project's scope'), adding only slight framing, so baseline 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?

States a specific verb and resource ('Find all actively contradicting belief pairs'), which cleanly separates it from the write-side sibling record_contradiction and from get_belief. It does not explicitly name an alternative tool or define what 'actively' excludes, so it stops short of a 5.

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 effect of supplying project, which implies when to narrow results, but gives no explicit when-to-use/when-not-to-use guidance versus siblings like query_relevant or explain_belief. Usage is inferable rather than stated.

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

get_evidenceB

Return the document passages grounding a belief (its GROUNDS edges), strongest first.

ParametersJSON Schema
NameRequiredDescriptionDefault
belief_idYes

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations, the description carries the behavioral burden. It usefully discloses that the result is document passages, that they correspond to GROUNDS edges, and that they are ordered strongest first, but it does not cover permissions, error behavior, or what happens when no evidence exists.

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

Conciseness5/5

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

The description is a single front-loaded sentence with no wasted words. It puts the purpose and ordering behavior immediately in view.

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 one-parameter read tool with no output schema and no annotations, the description covers the essential purpose and ordering but leaves the return shape and failure/empty cases unspecified.

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 0% and the sole parameter belief_id is undocumented in the schema. The description contextualizes belief_id as the belief whose grounding evidence is returned, which is helpful, but it does not specify ID format or additional semantics.

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 a specific verb ('Return') and resource ('document passages grounding a belief'), and clarifies the underlying relation ('GROUNDS edges'). It distinguishes itself from belief-detail tools like get_belief, though it does not explicitly name a sibling alternative.

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?

It implies the tool is used when evidence for a belief is needed, but it gives no explicit when-to-use guidance, no when-not-to-use guidance, and does not mention alternatives such as get_belief or query_relevant.

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

get_experienceB

Inspect current experience and revision tokens for safe correction or review.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

B3/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It does disclose a meaningful behavioral trait: the returned revision tokens enable concurrency-safe correction, hinting the tool is a read-only fetch paired with a versioned update. It still omits whether this is strictly read-only, what permissions are needed, and what happens for a stale id.

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 compact sentence with the tool's core action front-loaded. It earns its length, though the trailing 'revision tokens for safe correction or review' clause is terse enough to be ambiguous rather than merely brief.

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 single-param getter this is borderline adequate, and the revision-token mention adds useful context. But with no output schema and no annotations, the description should still specify the id's meaning and roughly what the response contains; both are left to inference.

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 single required 'id' (uuid) parameter is never mentioned in the description at all. There is no statement of what the id identifies, whether it is an experience id or a belief id, or how revision tokens relate to it, so the parameter is entirely undocumented.

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 pairs a specific verb ('Inspect') with the resource ('experience') and notes it returns revision tokens, so the basic purpose is legible. However, it never distinguishes itself from close siblings like review_experience, experience_history, or pending_experiences, and 'revision tokens' is unexplained jargon an agent must infer.

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 'for safe correction or review' implies a usage context (fetch state before mutating), which is more than nothing. But it gives no explicit when-to-use rule, no prerequisites, and does not name or contrast with the obvious alternatives review_experience or experience_history.

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

insert_beliefA

Add a belief grounded in an explicit user instruction or document independent of a queued incident. Provenance is required and persisted. Incident-derived conclusions must use record_experience and review_experience candidates; a standalone prior plus review feedback would count one incident twice.

ParametersJSON Schema
NameRequiredDescriptionDefault
contentYes
projectNoOptional project scope. Beliefs in a project can be bulk-deleted with delete_project when the project is done.
confidenceYes
provenanceYesIdentify the independent source. Do not use this tool for a conclusion derived from an experience.
memory_typeNoFunctional memory type. 'fact' (default): declarative knowledge that decays over time absent reinforcement. 'experiential': a hard-won working lesson (gotcha, corrected approach) — exempt from time-decay, since its truth doesn't erode with elapsed time. 'working': task-local scratch memory, excluded from cross-session query_relevant retrieval.
probabilityYes

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are supplied, so the description carries the full behavioral burden. It usefully discloses that provenance is required and persisted, which is real behavioral context. However, it says nothing about permissions, idempotency/duplicate handling, or what an add returns, leaving meaningful gaps for a mutation tool with zero annotation coverage.

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?

Three sentences, front-loaded with the core action before the provenance requirement and the routing caveat. Every sentence is doing work, though the third sentence is dense and jargon-heavy ('standalone prior plus review feedback would count one incident twice').

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 6-parameter tool with a nested provenance object and no annotations or output schema, the description covers purpose, provenance duty, and sibling routing but omits meaning for several scalar parameters and any dedup/return behavior. Adequate to call correctly in the common case, incomplete around the edges.

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 50%, so half the parameters rely on the description. The description clarifies provenance semantics (must cite an independent source, not an experience) and the persistence implication, adding value beyond the enum. But it says nothing about probability, confidence, or content semantics, so it only partially compensates for the coverage gap.

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 ('Add a belief') and narrows the scope to sources grounded in an explicit user instruction or document. It also differentiates itself from the incident-derived path by naming record_experience and review_experience, so an agent can route without opening another schema. It does not distinguish itself from pattern-related siblings like insert_pattern, but the core action 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 Guidelines4/5

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

Provides a clear when-to-use (independent user instruction/document) and a when-not-to-use with named alternatives ('Incident-derived conclusions must use record_experience and review_experience candidates'). The double-counting warning reinforces the boundary condition. Lacks a positive prerequisite checklist, but the routing guidance is explicit.

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

insert_patternD

Add a new pattern to the graph.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNo
approachYes
situationYes
success_rateYes

TDQS

D1.5/5.0
Behavior1/5

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

With no annotations, the description carries the full behavioral burden and discloses nothing: no persistence/dedup behavior, no permission requirements, no mention of the success_rate range constraint or what happens on duplicate patterns. A one-line mutation description with zero annotation coverage leaves the agent with no 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.

Conciseness2/5

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

It is a single front-loaded sentence, so there is no padding, but the brevity reflects under-specification rather than economy. The one sentence provided does not earn its place by adding information beyond the name.

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?

A write tool with 3 required, undocumented parameters, no annotations, and no output schema. The description omits the return value, error behavior, and the semantics of the required fields — nothing an agent needs in order to call this correctly is present.

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% across 4 parameters, and the description supplies no meaning for situation, approach, success_rate, or project. Key ambiguities — whether project is a link or a label, whether success_rate is a probability or a count — are unresolved in both schema and prose.

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

Purpose2/5

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

"Add a new pattern to the graph" is essentially the tool name reworded: insert_pattern → add a pattern. It adds only the vague notion of "the graph" and does nothing to distinguish this from siblings like insert_belief, insert_experience, or delete_pattern. No indication of what a "pattern" is in this system.

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 when-to-use guidance, no prerequisites, no alternatives. The agent gets no signal about when a pattern should be inserted versus a belief or an experience, nor whether the referenced project must already exist. Completely silent on routing.

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

list_beliefsA

List beliefs. If project is given, restricts to that project's beliefs plus untagged (global) beliefs; omit to list everything. Use limit and offset for bounded, oldest-first pages; without limit the legacy full array is returned.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoReturn a page of at most this many beliefs, ordered by created_at then id. When present, the result is an object with beliefs, total, offset, and next_offset.
offsetNoZero-based position in the filtered, oldest-first result. Requires limit; use next_offset from the previous page.
projectNoRestrict to this project's beliefs plus untagged (global) beliefs. Omit to list everything.
memory_typeNoRestrict to this memory type. Useful for orphan cleanup of leftover Working beliefs from an interrupted prior session — NOT a substitute for tracking the IDs of Working beliefs your own session wrote, since this filter has no session-identity concept and cannot distinguish your in-flight Working beliefs from a concurrent session's on a shared DB.

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, and it does disclose the two distinct return modes (legacy full array vs paged object) and oldest-first ordering — valuable behavioral context. It stops short of describing permissions, error conditions, or the concurrency caveats that the memory_type param hints at.

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?

Three tight sentences, front-loaded with the core action and scope, then the paging modes. Every sentence carries meaning, though the project sentence overlaps the schema description.

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 list tool with 100% parameter coverage and no output schema, the description supplies the key missing piece — the dual array-vs-paged return behavior. It is adequate, with only minor gaps around auth and error conditions.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents all four parameters, including the project and paging semantics. The description largely restates the project and limit/offset behavior rather than adding syntax or edge-case meaning beyond what the schema provides, so baseline 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 opening verb+resource 'List beliefs' is unambiguous and the following sentences define the listing scope (project-filtered vs everything). It does not explicitly differentiate from siblings like get_belief or query_relevant, so it stops short of a 5.

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 real contextual guidance for the parameters — 'omit to list everything', and 'use limit and offset for bounded, oldest-first pages'. However it never names an alternative tool or states when to prefer this over get_belief/query_relevant, so usage is implied rather than routed.

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

list_patternsB

List patterns. If project is given, restricts to that project's patterns plus untagged (global) patterns; omit to list everything.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoRestrict to this project's patterns plus untagged (global) patterns. Omit to list everything.

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It does add one genuinely useful non-obvious behavior: a project scope also includes untagged (global) patterns. However, it omits pagination, result size/ordering, or any other operational behavior an agent might need.

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 waste, with the core purpose front-loaded and the scoping rule following immediately. Every clause 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?

For a single optional-parameter, read-style list tool with no output schema and no annotations, the description covers the essential scoping semantics. It is largely sufficient, with return format/pagination the only notable 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 description coverage is 100%, so the schema already documents the single 'project' parameter fully. The description merely restates that same semantics, adding no syntax, format, or example beyond the structured field, which is the baseline-3 case.

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+resource ('List patterns') that an agent can map directly to the tool's function. It does not, however, distinguish itself from sibling listing/query tools such as list_beliefs or query_relevant, leaving the selection ambiguous.

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 explains what the 'project' argument does but never says when to call this tool versus alternatives like query_relevant or list_beliefs. There is no when-to-use/when-not-to-use guidance, only parameter behavior.

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

load_documentA

Parse a markdown file into heading-bounded chunks, embed each chunk, and index them for semantic search. Replaces existing chunks for the same path on reload. Requires [embeddings] in config.toml.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesAbsolute or repo-relative path to the markdown file.
projectNoOptional project tag. Chunks tagged with a project can be bulk-deleted via delete_project.

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does meaningful work: it discloses upsert semantics ("Replaces existing chunks for the same path on reload") and an environment prerequisite. It stops short of authority requirements, failure behavior, or return shape, but the mutation profile is well conveyed.

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, each earning its place: operation, replacement behavior, and prerequisite. The core action is front-loaded with zero 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?

For a two-parameter tool with no output schema and no annotations, the description covers the action, the idempotency/replacement semantics, and the config requirement well. Minor gaps remain around permissions and failure modes, but nothing critical for correct invocation is missing.

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

Parameters3/5

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

Schema coverage is 100%, so both parameters are already fully documented in the schema, including the delete_project tie-in. The description adds no syntax, format, or constraint detail beyond that, so the baseline 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 gives a precise verb chain (parse, embed, index) and a clear resource (markdown file), specifically describing the indexing operation. It is functionally distinct from siblings like query_document and clear_document, but it never names them, so the differentiation must be inferred.

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 real prerequisite ("Requires [embeddings] in config.toml") and implies the reload/upsert use case, which is useful guidance. However, it gives no explicit when-to-use vs. when-not, and never routes the agent to query_document, clear_document, or delete_project.

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

pending_experiencesB

Get the oldest new or changed experiences awaiting LLM review. Bounded incremental work: successful review removes that exact version; failed/stale submissions leave it pending. A judge may temporarily exclude deferred IDs; an empty filtered array does not prove the whole queue is empty. No claim or lease; concurrent reviewers use revision checks.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
projectNo
exclude_idsNo

TDQS

B3.4/5.0
Behavior4/5

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

With no annotations the description carries the full burden and does so notably well: it discloses that successful review removes that exact version, failed/stale submissions persist, deferred IDs may be filtered, an empty result is not proof of an empty queue, and there is no lease (reviewers use revision checks). Gaps remain on return shape and pagination, but the mutation/concurrency semantics are richly covered.

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?

Four dense sentences, front-loaded with the core purpose followed by behavioral caveats. Every sentence contributes; no filler or repetition.

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 concurrency-sensitive queue tool with no annotations, no output schema, and 0% parameter coverage, the description covers behavior well but leaves parameter meaning and return/pagination shape undocumented. Adequate on the hard parts, incomplete on the structured-field 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?

All three parameters (limit, project, exclude_ids) have 0% schema description coverage, so the description should compensate and largely does not. It hints at exclude_ids semantics ('a judge may temporarily exclude deferred IDs') but says nothing about limit or project, leaving their meaning unaddressed.

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 ('Get the oldest new or changed experiences awaiting LLM review') and characterizes ordering (oldest) plus scope (awaiting review), which implicitly distinguishes it from review_experience and get_experience. It stops short of naming an alternative sibling 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?

Conveys implied context - this is the queue-fetching step for bounded incremental review work with concurrency safety - but never states when to prefer it over review_experience or get_experience, and gives no explicit exclusions. Usable for the target agent but leaves routing to inference.

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

propagate_fromC

Run defeat propagation from a seed belief ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It only says to 'Run defeat propagation' without disclosing whether beliefs are modified, whether changes are reversible, permissions required, rate limits, or what the propagation affects. This is minimal disclosure at best.

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 short sentence, front-loaded with the action and input. No filler is present, though the extreme brevity leaves little structure for a potentially complex operation.

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 annotations, no output schema, and a single undocumented parameter in the schema, the description should carry more context. It names the seed input but omits propagation semantics, side effects, and usage conditions, leaving an agent unable to predict the outcome.

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 sole parameter is named 'id' and the schema gives only type string with no description (0% coverage). The description adds that 'id' is a 'seed belief ID', which is a useful semantic mapping, but it does not specify format, constraints, or expected source.

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 action ('Run defeat propagation') and the input source ('from a seed belief ID'). It is clearer than a tautology, but it does not define what 'defeat propagation' entails or distinguish this operation from sibling tools like record_defeat or sweep_expired_defeated.

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 versus record_defeat, sweep_expired_defeated, or other belief operations. The only implicit usage is that it requires a seed belief ID. That is minimal, not misleading.

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

query_documentA

Semantic search over indexed document chunks. Embeds the query context and returns the most similar chunks ordered by cosine similarity. Requires [embeddings] in config.toml.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum results (0 = no limit).
contextYesQuery text to embed and search.
projectNoRestrict search to chunks tagged with this project.

TDQS

A3.9/5.0
Behavior4/5

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

Since no annotations are provided, the description carries the burden. It adds crucial behavioral context by explaining that the search is semantic, uses cosine similarity for ordering, and requires a specific external configuration file, which goes beyond the scope of the input schema.

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 highly concise, fitting the core function (semantic search, chunk return, cosine similarity) into the first sentence. The second sentence efficiently front-loads a critical configuration dependency.

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

Completeness3/5

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

The description is sufficient for correct tool invocation. However, because there is no output schema, the description is incomplete in explaining the *structure* of the returned 'chunks' (e.g., whether they contain just text or also metadata/IDs).

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 100% schema description coverage, the baseline is 3. The description reinforces the meaning of the 'context' parameter by stating the query must be 'embedded,' providing operational insight that complements the schema's simple definition of 'Query text to embed and search.'

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 defines the tool's function as 'Semantic search over indexed document chunks.' It specifies the mechanism—embedding the query context and ranking results by cosine similarity—providing a highly specific operational purpose.

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?

While it does not explicitly state when to use it versus sibling tools like query_relevant or get_evidence, it provides a critical usage constraint: 'Requires [embeddings] in config.toml.' This dependency serves as an important operational usage guideline.

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

query_interventionA

Counterfactual query P(downstream | do(target = value)). Severs the target's incoming edges and propagates along CAUSES edges only. READ-ONLY: returns projected probabilities for causal descendants; does NOT modify the graph. Use for 'if I change X, what downstream is affected?' — distinct from query_relevant (evidential association) and propagate_from (which mutates).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
valueYes

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does so well: it discloses read-only status, that it severs incoming edges, propagates along CAUSES edges only, returns projected probabilities, and does not modify the graph. It does not cover error behavior (e.g., unknown id) or performance characteristics, keeping it short of a 5.

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?

Opens with the formal definition, then the graph mechanic, then the read-only guarantee, then the routing sentence. Dense but every sentence carries distinct, load-bearing information with no 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?

No output schema or annotations exist, so the description must explain behavior and returns; it does explain the returned projected probabilities for causal descendants. It is largely sufficient for a two-param tool, missing only edge-case/error handling detail.

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 0%, so the description must compensate. It maps the do(target = value) notation onto the two params conceptually, but never clarifies what 'id' actually references (belief name, UUID, etc.) or how it is resolved, leaving a real gap for the caller.

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 precise operation (counterfactual intervention query) with the formal semantics P(downstream | do(target = value)) and the exact graph operation performed. Explicitly names the sibling tools it differs from, so an agent can select it without opening other schemas.

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

Usage Guidelines5/5

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

Provides an explicit user-facing trigger phrase ('if I change X, what downstream is affected?') and distinguishes itself from two named alternatives: query_relevant (evidential association) and propagate_from (which mutates). When-to-use, when-not, and alternative selection are all covered.

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

query_learning_contextC

Retrieve relevant beliefs and situation-matched procedures with outcome counts and Beta(1,1) success estimates. Agent reports and unknown outcomes do not count as measured success. Counts include current experience versions in this project only; retrieval is not successful use. Pattern matching is lexical; beliefs use existing hybrid retrieval.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
contextYes
projectYes

TDQS

C2.9/5.0
Behavior3/5

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

With no annotations this description carries the full burden. It valuably discloses non-obvious traits: outcome counts cover current experience versions in this project only, agent reports/unknown outcomes do not count as measured success, pattern matching is lexical and belief retrieval is hybrid. However, it omits return structure, ordering, and any cost/permission notes.

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?

Purpose is front-loaded in the first clause, with the semantic caveats following in terse sentences. Dense but no filler sentences; the only cost is that caveats compete with the core purpose early on.

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?

A retrieval tool with 3 undocumented parameters, no annotations, and no output schema needs more than this. Return shape and the meaning/format of 'context' are missing, leaving the agent unsure how to invoke it correctly despite the useful caveats about counts.

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, and it largely does not. The critical 'context' parameter is never explained (how a situation is expressed for lexical pattern matching), nor is 'project' scoping or the 'limit' bound clarified beyond the incidental note about lexical matching.

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 ('Retrieve') and resource ('relevant beliefs and situation-matched procedures') along with return contents (outcome counts, Beta estimates). It is distinguishable from simple list/query siblings in spirit, though it never explicitly contrasts with 'query_relevant' or 'list_beliefs'.

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 when-to-use guidance is provided: it does not say when this tool should be chosen over 'query_relevant', 'list_beliefs', or 'query_intervention'. The disclaimers about counts and retrieval are interpretive caveats, not invocation guidance.

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

query_relevantA

Hybrid retrieval: text match + graph-proximity expansion, ordered by probability. Set include_evidence=true to also return, per belief, the document passages that ground it (with weights). If project is given, restricts the candidate pool to that project's beliefs plus untagged (global) beliefs.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
contextYes
projectNoRestrict the candidate pool to this project's beliefs plus untagged (global) beliefs. Omit to search everything.
prefer_typeNoNudge ranking toward this memory type — a soft preference (same weight class as the probability prior), never strong enough to lift an off-topic belief of the preferred type over a real semantic match. Omit for type-neutral ranking.
include_evidenceNo
evidence_per_beliefNo

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations, the description carries the full burden, and it fulfills it by detailing the underlying system behavior (hybrid retrieval, probability ordering) and explaining what the boolean flag does ('also return, per belief, the document passages that ground 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?

The description is extremely dense and concise. It immediately front-loads the core mechanism and efficiently explains the functionality of the most important parameters in subsequent sentences.

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 highly complete regarding the complex logic (hybrid search, evidence handling, project scoping). It only misses mentioning parameters like `limit` or `prefer_type`, which are details better suited for the schema itself.

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?

Given the low schema coverage (33%), the description compensates significantly by adding crucial semantics. It explains that `include_evidence` provides 'document passages that ground it (with weights),' which is much richer than a simple boolean 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 goes beyond a simple 'search' by specifying the exact mechanism: 'Hybrid retrieval: text match + graph-proximity expansion,' which immediately tells the agent how the information is gathered and ranked by probability.

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 excellent internal usage guidelines by detailing the conditional effects of key parameters. It tells the agent to use `include_evidence=true` for grounding context and specifies that `project` restricts the search space to a specific pool.

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

record_causeA

Add a CAUSES edge from one belief to another (from_id causes to_id). Causal edges are what query_intervention traverses for counterfactual do(...) queries; unlike record_defeat this does NOT trigger propagation.

ParametersJSON Schema
NameRequiredDescriptionDefault
to_idYes
weightYes
from_idYes

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations the description carries the full behavioral burden. It usefully discloses a non-obvious trait that no structured field encodes: this edge does not trigger propagation, unlike record_defeat. However, it says nothing about weight semantics, error behavior for missing ids, duplicate-edge handling, or what the call returns.

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 tightly packed sentences, front-loaded with the core action and direction, followed by the two behavioral facts that matter most. No filler.

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 mutation tool with no annotations, no output schema, and 0% parameter coverage, the description is directionally complete but leaves weight semantics, failure modes, and duplicate/idempotency behavior unstated. Adequate, but gaps remain for a 3-param write operation.

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 0%, so the description must compensate. It clarifies the direction of the two id parameters ('from_id causes to_id'), which is the key semantic ambiguity, but the required weight parameter's meaning is entirely unaddressed despite the schema's 0-1 bounds.

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 (Add), a specific resource (a CAUSES edge), and the exact direction semantics (from_id causes to_id). It explicitly differentiates itself from sibling record_defeat, so an agent can distinguish it without opening a schema.

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?

Tells the agent the causal consequence ('what query_intervention traverses for counterfactual do(...) queries') and contrasts with record_defeat ('does NOT trigger propagation'), which effectively routes the agent between the two record_* tools. It stops short of stating explicit prerequisites (e.g., both beliefs must already exist).

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

record_contradictionB

Add a bidirectional CONTRADICTS relationship between two beliefs.

ParametersJSON Schema
NameRequiredDescriptionDefault
id_aYes
id_bYes
weightNo

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations, the description carries full behavioral disclosure, but it only mentions that the relationship is bidirectional and named CONTRADICTS. It omits important traits such as whether the operation is idempotent, what happens if the beliefs do not exist, permission requirements, or whether weight affects propagation.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no wasted words. It states the action and relationship type immediately, making it efficient even if it is terse.

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

Completeness2/5

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

For a mutation tool with no annotations, no output schema, three parameters, and zero schema description coverage, the description is far too thin. It does not cover weight semantics, duplicate handling, error conditions, or expected return behavior, leaving important gaps for an agent to call it 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?

Schema description coverage is 0%, so the description must explain all three parameters. It implies that id_a and id_b are beliefs, but it does not clarify their order, their string format, or the meaning and effect of the weight parameter at all.

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 gives a specific verb (Add), a specific relationship type (CONTRADICTS), and a specific resource (beliefs). It clearly distinguishes this operation from sibling relationship tools such as record_support, record_cause, and record_defeat because the relationship type is named explicitly.

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 says what the tool does but provides no guidance on when to use it versus alternatives such as record_support or record_cause. There are no exclusions, prerequisites, or contextual cues to help an agent choose this tool over siblings.

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

record_defeatC

Add a DEFEATS edge and trigger defeat propagation cascade.

ParametersJSON Schema
NameRequiredDescriptionDefault
to_idYes
weightYes
from_idYes

TDQS

C2.9/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, but it does disclose a real side effect: a defeat propagation cascade. It doesn't say what the cascade affects, how far it propagates, or whether it is costly or reversible, which matters for a mutation on a belief graph.

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?

A single front-loaded sentence with no filler; the primary action comes first and the cascade side effect second. It is appropriately terse, though the terseness contributes to the parameter and usage gaps.

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?

A mutation tool with no annotations, no output schema, and no parameter documentation is under-specified; the undefined cascade is the only behavioral detail. An agent cannot confidently supply weight or predict the effect on other beliefs.

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?

All 3 parameters have 0% schema description coverage, so the description must compensate and does not. It never mentions from_id, to_id, or weight — notably the 0-1 weight range and which id is the defeated belief 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?

States a specific verb (Add) and resource (DEFEATS edge), and the edge type distinguishes it from siblings like record_support and record_cause. It stops short of explicitly routing the agent among the parallel record_* 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?

No when-to-use guidance and no comparison against record_contradiction, record_support, or record_cause, despite those being obvious alternatives for a parallel naming family. The agent must infer the distinction from the edge type alone.

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

record_experienceA

Record one observed action and outcome for incremental LLM review. Use a stable UUID for the same incident, expected_revision=0 to create, or the returned revision to correct it. Do not also insert a standalone conclusion from this same incident; review-owned candidates avoid that duplicate prior. Exact retries do not duplicate evidence. ToolResult/UserFeedback are caller-reported provenance, not server verification. A correction invalidates the old review and retracts its effects atomically.

ParametersJSON Schema
NameRequiredDescriptionDefault
experienceYes
expected_revisionYes

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and delivers real behavioral content: idempotency ('exact retries do not duplicate evidence'), provenance caveats (caller-reported, not server-verified), and correction semantics ('invalidates the old review and retracts its effects atomically'). It does not disclose what happens on a revision mismatch or other failure modes, so it is not exhaustive.

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?

Five dense sentences, all front-loaded with the purpose before mechanics, and every sentence carries information (revision protocol, exclusion, idempotency, provenance, atomic correction). The 'review-owned candidates avoid that duplicate prior' phrasing is jargon-heavy and slightly opaque, but nothing is 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?

For a nested-object mutation tool with no annotations and no output schema, the description covers the concurrency contract, idempotency, provenance trust level, and correction side effects. The remaining gaps are return-value shape and conflict/error behavior on stale revisions.

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 0%, and while the description explains expected_revision well (0 to create, returned revision to correct) and hints at id as a stable incident key, the seven required nested experience fields (project, context, action, outcome, source, evidence) get no explanation. The enums are self-describing, but the description only partially compensates for the 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 a specific verb and resource with scope: 'Record one observed action and outcome for incremental LLM review.' The 'one observed action and outcome' framing plus the correction-vs-create semantics clearly separate it from siblings like review_experience, pending_experiences, and insert_belief.

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 concrete operational guidance: stable UUID for the same incident, expected_revision=0 to create, returned revision to correct. It also states an explicit exclusion ('Do not also insert a standalone conclusion from this same incident'), which routes the agent away from a duplicating sibling. It stops short of naming that sibling tool by name, so it is strong but not maximal.

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

record_supportC

Add a SUPPORTS edge from one belief to another.

ParametersJSON Schema
NameRequiredDescriptionDefault
to_idYes
weightYes
from_idYes

TDQS

C2.7/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It implies a mutation (adding an edge) but says nothing about idempotency for duplicate edges, whether the edge is directed, error behavior for unknown belief IDs, or whether existing weights are overwritten.

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?

A single front-loaded sentence with zero filler, and the edge type is stated immediately. It is arguably too terse rather than padded, but it is not under-specified in the tautological sense of restating the tool name.

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

Completeness2/5

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

For a required-parameter mutation tool with no annotations, no output schema, and 0% schema description coverage, the description omits weight semantics, duplicate handling, and failure modes. It is not sufficient on its own to invoke the tool 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 coverage is 0% across all three parameters, so the description must compensate and largely does not. The phrasing 'from one belief to another' loosely maps to from_id/to_id direction, but the required 'weight' parameter (0-1) is never explained in terms of what it represents or how it affects propagation.

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 ('Add') and resource ('SUPPORTS edge'), with the source and target being beliefs. Naming the edge type distinguishes it somewhat from siblings like record_cause, record_defeat, and record_contradiction, but it never explicitly contrasts with those parallel 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?

There is no guidance on when to use record_support rather than record_cause, record_defeat, or record_contradiction, all of which appear to create analogous edges. No prerequisites, no mention of what happens if the same edge already exists.

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

review_experienceB

Apply one atomic, revision-checked review. Declare new belief/pattern candidates with stable keys; the response maps keys to server UUIDs. Candidate creation is not an observed successful use. Existing UUID-only reviews remain valid. Corrections retract owned evidence and links while retaining candidate identity and independent work.

ParametersJSON Schema
NameRequiredDescriptionDefault
reviewYes
expected_review_revisionYes

TDQS

B3.1/5.0
Behavior4/5

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

With no annotations, the description discloses atomicity, revision checking, key-to-UUID response mapping, the fact that candidate creation is not observed successful use, legacy UUID-only validity, and retraction behavior for corrections. It still omits permissions, error behavior, and rate or effort constraints.

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?

Five compact sentences are front-loaded with the core action and key behavioral rules. Although jargon-dense, there is little wasted text.

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

Completeness2/5

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

For a high-complexity, nested mutation with no annotations and no output schema, the description explains only a slice of the required input and output semantics. It says the response maps keys to UUIDs but does not cover required fields or enough revision and error behavior for safe 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 0% and the nested review object contains many undocumented fields such as experience_id, experience_revision, expected_review_revision, reviewer, rationale, links, feedback, and superseded_beliefs. The description only partially explains candidates and legacy UUID-only reviews, leaving most parameter meaning to the raw schema.

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

Purpose4/5

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

The description names the action ('Apply one atomic, revision-checked review') and its candidate-declaration scope, so an agent knows this submits a review rather than merely recording an experience. It does not explicitly say the review targets an experience record or name a sibling alternative, so it is clear but not fully differentiated.

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 sentence states when to choose this tool over siblings such as record_experience, record_support, or insert_belief. The compatibility note ('Existing UUID-only reviews remain valid') is not usage guidance; the reader must infer the use case from the name and schema.

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

sweep_expired_defeatedA

Delete defeated beliefs whose grace period has elapsed (attenuated deletion — a defeated belief is deleted only once its probability has decayed below prob_threshold AND grace_hours have passed since it was last defeated, giving a wrong record_defeat call time to be caught and reversed first). Returns count of beliefs deleted. If project is given, restricts the sweep to that project's beliefs plus untagged (global) beliefs.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoRestrict the sweep to this project's beliefs plus untagged (global) beliefs. Omit to sweep everything.
grace_hoursNoHours since the belief was last defeated before it can be deleted.
prob_thresholdNoProbability below which a defeated belief becomes eligible for deletion.

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses that beliefs are permanently deleted, the AND-combined eligibility criteria, the attenuation safeguard, and the return value. It omits any statement about irreversibility or permission requirements, which keeps it from a 5.

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?

Front-loaded with the core action, followed by necessary qualifying detail. The long parenthetical is information-dense rather than wasteful, though it slightly delays the project-scoping note that an agent needs.

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 destructive batch tool with no output schema and no annotations, the description covers what gets destroyed, the gating conditions, and the return value ('count of beliefs deleted'). Adequate, with the only gap being irreversibility/permission context.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds value by spelling out the AND relationship between prob_threshold and grace_hours and clarifying that project scope includes untagged global beliefs — semantics beyond the isolated per-parameter schema text.

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 (delete) and resource (defeated beliefs) qualified by precise scope criteria (grace period elapsed, probability decayed). The conditional semantics self-distinguish it from single-item delete_belief and time-based decay_all, so an agent can route without opening schemas.

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?

Explains the triggering condition clearly, including the rationale for the grace period (letting a wrong record_defeat be reversed), which tells the agent when this sweep is appropriate. It stops short of explicitly naming delete_belief or decay_all as the alternative and giving exclusion rules.

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. 30 tool updates
    • First observedadd_evidence
    • First observedclear_document
    • First observeddecay_all
    • First observeddelete_belief
    • First observeddelete_pattern
    • First observeddelete_project
    • First observedexperience_history
    • First observedexplain_belief
    • First observedget_belief
    • First observedget_contradictions
    • First observedget_evidence
    • First observedget_experience
    • First observedinsert_belief
    • First observedinsert_pattern
    • First observedlist_beliefs
    • First observedlist_patterns
    • First observedload_document
    • First observedpending_experiences
    • First observedpropagate_from
    • First observedquery_document
    • First observedquery_intervention
    • First observedquery_learning_context
    • First observedquery_relevant
    • First observedrecord_cause
    • First observedrecord_contradiction
    • First observedrecord_defeat
    • First observedrecord_experience
    • First observedrecord_support
    • First observedreview_experience
    • First observedsweep_expired_defeated

TDQS

C2.9/5.0

Scored across 30 tools

Disambiguation4/5

Tools mostly target distinct resources and actions (beliefs, patterns, edges, evidence, experiences, documents, queries), and descriptions explicitly clarify tricky boundaries such as query_intervention vs query_relevant vs propagate_from. Some overlap remains between query_relevant/query_learning_context and insert_belief/record_experience, but the distinctions are workable.

Naming Consistency4/5

Most tool names follow a snake_case verb_noun pattern (get_belief, insert_pattern, record_defeat, list_beliefs). A few deviate, such as pending_experiences, experience_history, and decay_all, but the overall convention is still readable and consistent enough.

Tool Count2/5

With 30 tools, the server exceeds the 25+ threshold and presents a heavy surface for an agent to navigate, despite the domain being broad. Many tools are granular variants, such as multiple edge recorders, multiple query types, and separate experience inspection calls.

Completeness4/5

Core lifecycle coverage is strong: beliefs can be inserted, fetched, listed, and deleted; patterns can be inserted, listed, and deleted; edges, evidence, documents, experiences/reviews, queries, and maintenance are all represented. Minor gaps include no direct get_pattern, update_belief, or update_pattern, though reviews and decay mechanisms partially cover updates.

Maintenance

ActivityActive
ResponsivenessSlow

Related MCP Connectors

Related MCP Servers