Skip to main content
Glama

Core

This repository is the public Waggle product repo: Apache-2.0 licensed, available on GitHub and PyPI, and focused on the local-first memory engine.


Related MCP server: Graphiti Knowledge Graph MCP Server

Quick Start

# Install globally (no venv needed)
pipx install waggle-mcp

# One-line setup — detects your MCP clients and writes config
waggle-mcp setup --yes

# Verify everything is healthy
waggle-mcp doctor

(No pipx? Run brew install pipx && pipx ensurepath first.)

setup --yes detects Claude Code, Codex, Cursor, Gemini CLI, and Antigravity, writes the MCP config, and installs automatic memory hooks where supported. Restart your client and you're live.

Windows users: Run all commands with python -X utf8 or set PYTHONUTF8=1 to avoid UnicodeEncodeError from emoji in log output.

Install Waggle

Waggle is a local MCP server that gives coding agents persistent graph memory.

Recommended:

Benchmark:

  • LongMemEval 500-case retrieval-only: 97.4% R@5, 89.0% Exact@5 for graph_raw retrieval (artifact)

VS Code extension features:

  • one-click Enable for this Workspace onboarding

  • installs waggle-mcp with consent if it is missing

  • safely creates or updates .vscode/mcp.json

  • preserves existing non-Waggle MCP servers

  • runs waggle-mcp doctor

  • opens Graph Studio

  • exports Waggle memory from the editor

Claude distribution:

  • Claude Code does not use an .mcpb bundle. Users add Waggle directly as an MCP server:

pipx install waggle-mcp
claude mcp add --transport stdio waggle -- waggle-mcp serve --transport stdio
  • Claude Desktop uses the claude-desktop-extension.mcpb bundle, which can be distributed through GitHub Releases.

Manual MCP config:

{
  "mcpServers": {
    "waggle": {
      "command": "waggle-mcp",
      "args": ["serve", "--transport", "stdio"]
    }
  }
}

Enterprise Evaluation

For self-hosted production review and security posture:


60-Second Demo

No MCP client needed. Run this from a fresh install:

waggle-mcp demo

This imports a pre-loaded example graph and runs 4 scripted queries locally — no API key, no network, no client required. Add --with-embeddings to use the real sentence-transformers model for higher-fidelity retrieval (requires ~420 MB download on first run).


Why Waggle

waggle-mcp is a local-first memory layer for MCP-compatible AI clients, built on a persistent knowledge graph.

The core difference from flat note storage or chunked RAG is the graph structure. Waggle doesn't just store facts — it stores the relationships between them: this decision depends on that constraint, this preference contradicts that earlier one, this requirement was updated three sessions ago. When you query, you get a subgraph with the reasoning chain attached, not just the matching text.

Without Waggle

With Waggle

Paste context into every session

Compact subgraph retrieved at query time

Session-local memory only

Persistent memory across all sessions

Flat notes, no structure

Typed nodes and edges: decisions, reasons, contradictions

"What changed?" requires replaying logs

Temporal queries, diffs, and conflict resolution are first-class

Contradictions silently overwrite history

Both positions preserved, contradiction edge explicit

What Is In Core Today

Waggle Core is the open-source local memory foundation:

  • SQLite-backed graph memory

  • MCP server integration

  • CLI setup and doctor flows

  • local embeddings or deterministic fallback

  • graph querying, observation, and context priming

  • import/export and graph inspection utilities

Product Scope

This public repo is the product-facing Waggle surface:

  • MCP server and tool surface

  • local-first graph memory

  • automatic memory hooks and orchestration

  • .abhi export, import, diff, merge, and checkpoint handoff

  • Graph Studio and admin tooling

Research artifacts, benchmark harnesses, evaluation reports, and paper material now live in the private waggle-pro repo.


Architecture

MCP Client (Claude / Codex / Gemini CLI / Cursor / Antigravity / ChatGPT)
    ↓
waggle.server  — MCP tool surface
    ↓
RecursiveContextController  — RLM-inspired context assembly (build_context)
    ↓
Graph Engine  — MemoryGraph (SQLite) or Neo4jMemoryGraph
    ↓
Embeddings  — sentence-transformers (local) or deterministic fallback

Recursive Context Assembly

Waggle stores memory outside the model context window. Instead of pasting long context into every prompt, agents call build_context to get a compact, high-signal context pack assembled from the graph.

Inspired by Recursive Language Models — the idea of externalising long context into an environment and interacting with it through decomposition and targeted retrieval.

How it works:

  1. Decompose — the query is split into targeted subqueries (decisions, constraints, implementation details, unfinished work, conflicts)

  2. Retrieve — each subquery runs against graph, hybrid, and verbatim transcript retrieval

  3. Expand — the graph is traversed around top nodes via typed edges (updates, contradicts, depends_on, derived_from)

  4. Resolve — update chains and contradictions are detected; superseded nodes are flagged

  5. Deduplicate & rank — overlapping hits are merged; high-signal node types (decisions, preferences) are boosted

  6. Compress — everything is packed into a structured context brief under a configurable token budget

Example MCP call:

{
  "tool": "build_context",
  "arguments": {
    "query": "Continue implementing Waggle from where we left off",
    "project": "waggle-mcp",
    "token_budget": 1000,
    "depth": 2
  }
}

Example output:

### Waggle Recursive Context Pack
Task: Continue implementing Waggle from where we left off

Current relevant decisions:
- [decision] Use SQLite for local storage: We chose SQLite with WAL mode for local-first deployments.
- [decision] Hybrid retrieval default: Hybrid (vector + BM25 + graph) is the default retrieval mode.

Active constraints:
- [preference] No external LLM APIs required: All retrieval must work fully local.

Important implementation context:
- [fact] RecursiveContextController added: New module waggle/recursive_context.py implements build_context.

Conflicts or superseded context:
- Possible conflict: 'Use Flask' contradicts 'Use FastAPI'

Config env vars:

Variable

Default

Description

WAGGLE_RECURSIVE_CONTEXT_ENABLED

true

Enable/disable the feature

WAGGLE_RECURSIVE_CONTEXT_DEFAULT_BUDGET

1200

Default token budget

WAGGLE_RECURSIVE_CONTEXT_MAX_SUBQUERIES

6

Max decomposed subqueries

WAGGLE_RECURSIVE_CONTEXT_DEFAULT_DEPTH

2

Graph expansion depth

WAGGLE_RECURSIVE_CONTEXT_INCLUDE_EVIDENCE

true

Include transcript evidence

Tool aliases: recursive_context, assemble_context, rlm_context all resolve to build_context.


How It Works

User  → Agent → observe_conversation(...)  → Graph stores typed nodes + edges
User  → Agent → query_graph("database")   → Subgraph returned → Agent answers with linked rationale

Session 1

User:  Let's use PostgreSQL. MySQL replication has been painful.
Agent: [calls observe_conversation()]
       → stores decision node: "Chose PostgreSQL over MySQL"
       → stores reason node:   "MySQL replication painful"
       → links them with a depends_on edge

Session 2 (fresh context window, no history)

User:  What did we decide about the database?
Agent: [calls query_graph("database decision")]
       → retrieves the decision node + linked reason from Session 1
       "You decided on PostgreSQL. The reason recorded was that MySQL replication had been painful."

Session 3

User:  Actually, let's reconsider — the team is more familiar with MySQL.
Agent: [calls store_node() + store_edge(new_node → old_node, "contradicts")]
       → both positions are preserved, and the contradiction is explicit

Setting Up as an MCP Server

One-time install: pipx install waggle-mcp — no API key, no cloud account, no Docker required for local use.

Shared JSON config for clients that accept mcpServers JSON:

{
  "mcpServers": {
    "waggle": {
      "command": "waggle-mcp",
      "args": ["serve"],
      "env": {
        "WAGGLE_TRANSPORT": "stdio",
        "WAGGLE_BACKEND": "sqlite",
        "WAGGLE_DB_PATH": "~/.waggle/waggle.db",
        "WAGGLE_DEFAULT_TENANT_ID": "local-default",
        "WAGGLE_MODEL": "all-MiniLM-L6-v2",
        "WAGGLE_STARTUP_MODE": "normal"
      }
    }
  }
}

First run takes ~30 s — all-MiniLM-L6-v2 (~420 MB) downloads on first use. To skip the download: set "WAGGLE_MODEL": "deterministic" (offline-safe, instant start, slightly lower retrieval quality).

Claude Desktop

Config file location:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

Add the mcpServers block above.

Claude Code

claude mcp add waggle \
  --env WAGGLE_TRANSPORT=stdio \
  --env WAGGLE_BACKEND=sqlite \
  --env WAGGLE_DB_PATH=~/.waggle/waggle.db \
  --env WAGGLE_DEFAULT_TENANT_ID=local-default \
  --env WAGGLE_MODEL=all-MiniLM-L6-v2 \
  -- waggle-mcp serve

Claude Code also supports automatic memory hooks — see the Hooks section below.

Codex

Add to ~/.codex/config.toml:

[mcp_servers.waggle]
command = "waggle-mcp"
args    = ["serve"]
env     = {
  WAGGLE_TRANSPORT         = "stdio",
  WAGGLE_BACKEND           = "sqlite",
  WAGGLE_DB_PATH           = "~/.waggle/waggle.db",
  WAGGLE_DEFAULT_TENANT_ID = "local-default",
  WAGGLE_MODEL             = "all-MiniLM-L6-v2"
}

waggle-mcp setup --yes also writes a managed memory block into AGENTS.md in the current workspace so automatic memory is enabled by default for that repo.

Gemini CLI

gemini mcp add waggle \
  -e WAGGLE_TRANSPORT=stdio \
  -e WAGGLE_BACKEND=sqlite \
  -e WAGGLE_DB_PATH=~/.waggle/waggle.db \
  -e WAGGLE_DEFAULT_TENANT_ID=local-default \
  -e WAGGLE_MODEL=all-MiniLM-L6-v2 \
  waggle-mcp serve

After restarting, run /mcp to confirm Waggle is connected.

Cursor

Cursor Settings → Features → MCP Servers → + Add

  • Command: waggle-mcp

  • Args: serve

  • Env vars: same keys as the JSON block above.

Antigravity

The AI agent reads ~/.gemini/antigravity/mcp_config.json (macOS/Linux) or %USERPROFILE%\.gemini\antigravity\mcp_config.json (Windows). Add the waggle block there. The VS Code extension panel reads a different file — adding waggle there will NOT make it available to the AI agent.

Run waggle-mcp doctor to see exactly which config files exist and which ones have a waggle entry.

ChatGPT

ChatGPT custom MCP connectors require a remote HTTPS server. Deploy Waggle in HTTP mode with the Neo4j backend, expose /mcp over HTTPS, then add that URL as a custom connector in ChatGPT (Settings → Connectors → Advanced → Developer mode).

WAGGLE_TRANSPORT=http \
WAGGLE_BACKEND=neo4j \
WAGGLE_DEFAULT_TENANT_ID=workspace-default \
WAGGLE_NEO4J_URI=bolt://localhost:7687 \
WAGGLE_NEO4J_USERNAME=neo4j \
WAGGLE_NEO4J_PASSWORD=change-me \
waggle-mcp serve

Do not expose Waggle publicly without authentication.

waggle-mcp not on PATH?

pipx ensurepath   # then restart your terminal

Automatic Memory — Prompt Rules

Registering Waggle as an MCP server only makes the tools available. For the agent to call them automatically, add this instruction block to your client's prompt, rules, or project instructions:

Use Waggle automatically for conversational memory.

At the start of a new session, if project, agent, or session scope is known, call prime_context.

Before answering questions that may depend on prior decisions, preferences, constraints, project state,
or earlier conversation context, call query_graph with the narrowest relevant scope.

After completed turns that contain durable information such as decisions, preferences, constraints,
requirements, user corrections, project facts, or meaningful task outcomes, call observe_conversation
automatically.

Waggle should remember relevant context automatically. If memory appears empty, the session is likely
missing the automatic memory policy or the runtime hooks that call build_context before answers and
on_assistant_turn after answers.

Do not ask the user to trigger Waggle manually. Use it in the background when relevant.

Use the same stable project value for the same codebase across sessions, or recall will fragment.


Automatic Memory Hooks (Claude Code)

For Claude Code, waggle-mcp setup --yes installs three hook scripts that capture memory deterministically — no prompt rules needed:

Hook script

Claude Code event

What it does

pre_response.py

UserPromptSubmit

Tries scoped DB recall first; if the scope is cold and a session checkpoint exists, imports the .abhi checkpoint and retries before Claude responds

post_response.py

Stop

Applies Waggle's durable-ingest policy and only calls observe_conversation for turns worth remembering

pre_compact.py

PreCompact

Calls ingest_transcript_handoff to preserve durable info before context compression, emit a session .abhi checkpoint, and refresh the checkpoint manifest

Each hook always exits 0 (a Waggle bug never blocks your session) and has a 5-second timeout. post_response.py scans turn text for likely secrets before storing, skips low-value chatter, and only ingests durable turns.

# Install hooks (included in setup --yes)
waggle-mcp setup --yes

# Skip hook installation
waggle-mcp setup --yes --no-hooks

# Remove hooks
waggle-mcp uninstall-hooks

Verify It Works

After restarting your client, ask the agent:

"Store a note: we're using PostgreSQL for this project."

Then open a fresh session and ask:

"What database are we using?"

Expected:

You're using PostgreSQL for this project.

MCP Tool Reference

The full tool surface is large (~40 tools). In practice, an agent in normal use only needs the six core tools. Everything else is for human-driven inspection, graph management, and export workflows.

Core tools — what the agent calls automatically

These are the tools your prompt rules or hooks should wire up. An agent that only knows these six will handle the vast majority of memory tasks correctly.

Tool

When the agent calls it

observe_conversation

After any turn containing a decision, preference, constraint, correction, or project fact. Persists the verbatim turn first, then extracts graph nodes. Returns turn_id, verbatim_stored, nodes_extracted, edges_inferred.

query_graph

Before answering questions that may depend on prior context. Hybrid retrieval (graph + verbatim transcript) by default. Supports as_of for point-in-time queries.

prime_context

At the start of a new session to hydrate context from the most relevant scoped memories.

graph_diff

When the user asks what changed recently.

store_node + store_edge

When the agent needs to store a single atomic fact or explicitly link two nodes. Prefer observe_conversation for conversational turns — use these for structured, deliberate writes.

observe_conversation and decompose_and_store create edges automatically. If you only call store_node, you get isolated facts with no traversal value.

Extended retrieval — agent-callable, situational

Tool

Description

aggregate_graph

Broad filtered subgraph for map-reduce tasks. Use when you want a large scoped slice rather than high-precision top-K. Supports node_types, tags, as_of, include_invalidated.

get_related

Fetch the neighborhood around a specific node by ID.

get_node_history

Inspect a node's evidence, validity window, and connected context.

get_topics

Topic clusters via community detection across the full tenant graph.

timeline

Chronological view of memory changes for a node or query.

list_conflicts

List unresolved contradiction and update edges.

resolve_conflict

Mark a conflict resolved. Pass winner (node ID) to supersede the losing node — sets its valid_to to now.

Operator / human tools — not for routine agent use

These are for you as the operator: graph health, deduplication, export, and migration. Exposing all of these to an agent in normal use adds noise without benefit.

Graph management

Tool

Description

update_node

Update an existing node's content, label, or tags.

delete_node

Delete a node and all its edges.

decompose_and_store

Break long content into atomic nodes and infer edges automatically.

dedup_candidates

Return near-duplicate node pairs above a similarity threshold for human review.

canonicalize_node

Merge multiple nodes into one canonical node. Repoints all edges, collects aliases. Idempotent.

edge_quality_report

Audit edge quality — counts, average confidence per type, top/bottom confidence edges.

debug_retrieval

Diagnose retrieval ranking for a query — embedding scores, window routing, tiered vs flat comparison.

Context windows

Tool

Description

list_context_scopes

Known agent, project, and session scope values.

list_context_windows

Chat/session-level memory containers with status and node counts.

get_context_window

Inspect one context window and its nodes.

close_context_window

Close a session window and derive cross-window edges.

window_graph_viz

Export the context-window graph as an interactive HTML visualization.

export_graph_html

Export the memory graph as an interactive HTML visualization.

get_stats

Node/edge counts, type breakdowns, and recent highly-connected nodes.

Memory files — git-vocabulary interface

Waggle uses a git-inspired vocabulary for portable memory snapshots:

Tool

Git analogy

Description

commit

git commit

Snapshot the graph to a .abhi file. Formats: abhi (default), backup (raw JSON), bundle (Markdown/JSON context pack).

pull

git pull

Load a .abhi or backup file into the current graph. Runs integrity verification before merging.

diff

git diff

Compare two .abhi files — added/removed/updated nodes and edges.

merge

git merge

Three-way merge two .abhi branches against a common base. Conflicts surface as CONTRADICTS edges.

fsck

git fsck

Validate a .abhi file without importing it.

show

git show

Inspect a .abhi file's summary stats without loading it.

grep

git grep

Execute a saved or ad hoc query against a .abhi file.

load_abhi_chunks

Load only selected or query-relevant chunks from a .abhi file.

Legacy tool names (export_graph_backup, import_abhi, diff_abhi, merge_abhi, validate_abhi, inspect_abhi, query_abhi) are still accepted and automatically mapped to their canonical equivalents.

Vault

Tool

Description

export_markdown_vault

Export the graph as an Obsidian-compatible Markdown vault.

import_markdown_vault

Import an edited Obsidian vault back into the graph non-destructively.


What To Ask The Agent

Ask the agent...

Tool called

"Remember that..."

observe_conversation

"What do you know about X?"

query_graph

"What changed recently?"

graph_diff

"Summarize context for a new session"

prime_context

"Show all stored topics"

get_topics

"Export my memory to a file"

commit

"Are there any duplicate nodes?"

dedup_candidates

"What's the quality of my graph edges?"

edge_quality_report

Edges are what make graph memory work. observe_conversation and decompose_and_store create edges automatically. If you only call store_node, you get isolated facts — not a connected graph.

For broad summarization tasks, prefer aggregate_graph over query_graph when you want a large scoped slice of memory instead of high-precision semantic ranking.


Graph Data Model

Node types: fact, entity, concept, preference, decision, question, note

Edge types: relates_to, contradicts, depends_on, part_of, updates, derived_from, similar_to

Temporal validity: Every node supports valid_from and valid_to fields. query_graph and aggregate_graph exclude expired nodes by default. Pass include_invalidated: true to include them, or as_of: "<ISO-8601 datetime>" to query the graph at a specific point in time. resolve_conflict with a winner node ID automatically sets the losing node's valid_to to now.


Cross-Client Handoffs & Migration

Same machine — automatic sharing

Point multiple clients at the same WAGGLE_DB_PATH (default ~/.waggle/waggle.db) and they share one brain automatically.

Session handoffs

# Explicit checkpoint before switching sessions or apps
waggle-mcp checkpoint-context --project MCP --session-id thread-123 --output ./handoff.abhi

Resume order is:

  • same machine / shared WAGGLE_DB_PATH: use the live SQLite memory first

  • if that scoped DB recall is empty: import the session .abhi checkpoint

  • different machine or explicit transfer: waggle-mcp pull ./handoff.abhi

Full migration

# Export
waggle-mcp export-graph-backup --output-path my_memory.json

# Import on new machine
waggle-mcp import-graph-backup --input-path my_memory.json

CLI Command Reference

Command

Description

waggle-mcp --help

Show all commands and options.

waggle-mcp features

Best first command — tool map, workflows, and setup hints.

waggle-mcp doctor

Run this if something isn't working — checks config, model cache, DB path.

waggle-mcp doctor --fix

Re-embed stale rows after a WAGGLE_MODEL change.

waggle-mcp setup --yes

Non-interactive one-line setup for all detected clients.

waggle-mcp init

Interactive setup wizard for one client.

waggle-mcp serve

Run the MCP server (usually started by your client).

waggle-mcp demo

Run the 60-second local demo with a pre-loaded example graph.

waggle-mcp edit-graph

Launch Graph Studio in the browser.

waggle-mcp uninstall-hooks

Remove the waggle-managed hooks block from Claude Code settings.

waggle-mcp export-context-bundle

Export a portable Markdown/JSON context pack.

waggle-mcp export-markdown-vault

Export the graph as an Obsidian-style vault.

waggle-mcp ingest-transcript-handoff

Ingest a rollover transcript, export a handoff bundle, and emit a session .abhi checkpoint.

WAGGLE_STARTUP_MODE

Value

Behaviour

Best for

normal (default)

Model loads in background; server responds immediately

Daily use

fast

ML never loads; semantic tools return unavailable

Schema inspection, tool listing

strict

Server blocks until model is fully loaded

Production deployments


Graph Studio

waggle-mcp edit-graph

A local browser-based graph editor for inspecting and editing memory directly. Features:

  • Dual-layer graph/conversation views in the same UI

  • Transcript provenance and retrieval-debug inspection for hybrid memory results

  • Mouse-based node dragging and shift-drag edge creation

  • Collapsible side panels, focus mode, and label toggling for large graphs

  • Live graph stats: connected nodes, isolates, cluster count

  • Export/import of the current graph, including .abhi preview, diff, and sharing workflows

.abhi files are JSON underneath — they support optional embedded vectors, optional AES-256-GCM encryption, deterministic content hashing, and a magic-bytes header (WGL\x01) for format identification. Legacy bare-ZIP files are read transparently.

waggle-mcp push encrypts .abhi exports by default. Export paths refuse to proceed if transcript text contains likely secrets unless you pass --force.


Model Support

Waggle uses a local sentence-transformers model selected by WAGGLE_MODEL.

  • Default: all-MiniLM-L6-v2

  • Any locally available sentence-transformers model name works.

  • If the model is unavailable, Waggle falls back to deterministic SHA-256 embeddings.

WAGGLE_MODEL=all-mpnet-base-v2 waggle-mcp serve

For existing DBs, a model change is a migration event: run waggle-mcp doctor, then waggle-mcp doctor --fix if mixed embedding_model_id values are reported.

WAGGLE_DEDUP_THRESHOLD

Controls the cosine similarity threshold for automatic node deduplication at write time (default 0.88, minimum 0.85). Nodes above this threshold with matching type and scope are merged automatically. Use dedup_candidates to review near-duplicates below the auto-merge threshold.


Security & Privacy

  • Data stays local by default (~/.waggle/waggle.db). No telemetry, no cloud calls for local operation.

  • Memory only leaves your machine if you configure a remote backend or explicitly export/push.

  • Local SQLite is not encrypted at rest — use OS disk encryption if the stored history is sensitive.

  • Before .abhi export, Waggle scans transcript text for likely secrets (API keys, JWTs, passwords). Export is refused if secrets are found unless you pass --force.

  • waggle-mcp push defaults to AES-256-GCM encrypted export.


Known Limitations

  • Edges are load-bearing. observe_conversation and decompose_and_store create them automatically. Raw store_node calls without follow-up edges produce disconnected nodes with no traversal value.

  • Graph retrieval trades tokens for reasoning context. Factual lookups are often cheaper than chunked RAG; graph-expansion queries intentionally spend more tokens to carry update chains and contradictions.

  • Hybrid rerank is not the default. The no-rerank hybrid path is stronger right now. The rerank path is available but intentionally not the launch default.

  • Deduplication is similarity-based, not universal semantic equivalence. Broader production text may still require additional aliases or stricter domain guards.


Troubleshooting

Run waggle-mcp doctor first — it catches the most common issues automatically.

Symptom

Likely cause

Fix

waggle-mcp: command not found

pipx bin dir not on PATH

pipx ensurepath then restart terminal

store_node / query_graph hangs

Embedding model downloading (~420 MB)

Set WAGGLE_MODEL=deterministic for instant offline mode

UnicodeEncodeError: 'charmap' codec

Windows stdout not UTF-8

python -X utf8 or set PYTHONUTF8=1

Additional properties not allowed ('user_text', 'assistant_text')

Old pre-v0.2 field names

Use user_message + assistant_response

Waggle registered but agent doesn't see it (Antigravity)

Wrong config file

Agent reads ~/.gemini/antigravity/mcp_config.json, not the VS Code extension file

ModuleNotFoundError: No module named 'mcp'

Wrong Python environment

Use pipx install waggle-mcp and run via waggle-mcp ...

pipx install fails building sentence-transformers

Python/OS wheel mismatch

Use Python 3.11+; upgrade: python3 -m pip install -U pip setuptools wheel


Reference & Docs

  • Environment variables, full tool surface, admin commands, Docker setup: waggle-mcp --help or docs/reference.md

  • Production deployment: deploy/kubernetes/README.md

  • Operations and troubleshooting: docs/runbooks/

  • Automatic memory rules (copy-pasteable): docs/automatic-memory-rules.md

  • Hook integration details: docs/hooks.md

  • .abhi format spec: docs/abhi-format-v2.md


Contributing

This repository is maintained privately. Internal contributors can use the docs in this repo as the source of truth.

Available Tools

41 tools
aggregate_graphA

Retrieve a broad set of nodes bypassing standard semantic limits, optimized for global aggregation and map-reduce tasks. Supports filtering by node_type and tags.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNoOptional list of tags to require.
as_ofNoISO-8601 datetime. When provided, return only nodes valid at that point in time (overrides include_invalidated).
queryNoOptional natural-language search query to rank the broad retrieval.
projectNoOptional project or workspace name used to partition memory.
agent_idNoOptional agent or client identifier used to partition memory.
max_depthNoRelationship traversal depth around matching nodes.
max_nodesNoMaximum number of nodes to return (default 100, up to 1000).
node_typesNoOptional list of node types to filter by (e.g., 'fact', 'entity').
session_idNoOptional conversation or run identifier used to partition memory.
include_invalidatedNoWhen true, include nodes whose valid_to has passed. Default false excludes expired nodes.

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations provided, the description must convey behavioral traits. It indicates the tool is a read operation ('Retrieve') and efficient for aggregation, but does not disclose idempotency, side effects, or any access constraints. The description adds some context but leaves gaps.

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 consists of two concise sentences, front-loaded with the core purpose and optimization context. Every sentence adds value, and there is no extraneous information.

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

Completeness2/5

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

The description lacks output details; it doesn't mention the format or structure of returned nodes, which is critical for a tool intended for aggregation and map-reduce tasks. Without an output schema, this omission reduces completeness.

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

Parameters3/5

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

The input schema has 100% coverage, so parameters are already well-documented. The description only repeats that filtering by node_type and tags is supported, adding no new semantic information beyond the schema.

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

Purpose5/5

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

The description clearly states the tool retrieves a 'broad set of nodes' bypassing 'standard semantic limits', making it distinct from sibling tools like query_graph and get_related. It also specifies optimization for global aggregation and map-reduce tasks, which uniquely identifies its purpose.

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

Usage Guidelines4/5

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

The description implies usage for large-scale aggregation tasks by mentioning 'bypassing standard semantic limits' and 'optimized for global aggregation and map-reduce'. However, it does not explicitly state when not to use it or name alternative tools, which would strengthen guidance.

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

build_contextA

Recursively retrieves and compresses relevant Waggle memory for the current task, using graph, hybrid, transcript, update, and conflict-aware retrieval. Decomposes the query into targeted subqueries, expands the graph around key nodes, resolves contradictions and superseded memories, and returns a compact context pack under a configurable token budget. Aliases: recursive_context, assemble_context, rlm_context.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoRetrieval depth mode: 'fast' runs fewer subqueries for low latency; 'balanced' is the default; 'deep' adds extra subqueries for thorough coverage.balanced
depthNoGraph expansion depth around retrieved nodes.
queryYesCurrent user task or question to build context for.
projectNoOptional project or workspace name used to partition memory.
agent_idNoOptional agent or client identifier used to partition memory.
session_idNoOptional conversation or run identifier used to partition memory.
token_budgetNoMaximum token budget for the context pack (approximate).
max_subqueriesNoMaximum number of decomposed subqueries to run.
include_evidenceNoWhether to include verbatim transcript evidence in the context pack.
context_window_idNoOptional context window ID to focus retrieval within an existing window.

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 full burden of behavioral disclosure. It discloses several key behaviors: recursive retrieval, compression, subquery decomposition, graph expansion, contradiction resolution, and token budgeting. However, it does not mention potential side effects on persistent memory (e.g., whether it mutates stored data), leaving some ambiguity.

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

Conciseness5/5

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

The description is concise, two sentences long, and front-loads the main purpose. It includes an alias list for discoverability. Every sentence serves a purpose, describing the what, how, and output without redundancy.

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

Completeness4/5

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

For a tool with 10 parameters and no output schema, the description provides a solid high-level understanding of the retrieval process and output type (compact context pack). However, it does not specify the exact structure of the context pack or detail how parameters like project/agent_id/session_id are used, which might be needed for correct invocation in complex scenarios.

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

Parameters3/5

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

The schema has 100% parameter description coverage, so the baseline is 3. The description adds some context by referring to subqueries (max_subqueries), graph expansion depth (depth), and token budget, but it does not explain each parameter in detail beyond what the schema already provides. It adds minimal value beyond the schema.

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

Purpose5/5

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

The description clearly states the tool's primary function: 'Recursively retrieves and compresses relevant Waggle memory for the current task.' It differentiates from siblings by detailing graph, hybrid, transcript, update, and conflict-aware retrieval, and explicitly mentions returning a context pack. This makes the tool's unique role obvious.

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

Usage Guidelines3/5

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

The description implies usage for building context for the current task, but does not explicitly state when to use this tool over siblings like query_graph or prime_context. It lacks 'use this when' or 'do not use for' guidance, so an agent must infer from the description alone.

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

canonicalize_nodeA

Manually merge multiple nodes into a single canonical node. All aliases from the merged nodes flow into the canonical node's aliases. All edges pointing to/from merged nodes are re-pointed to the canonical node. Merged nodes are deleted. Idempotent: merging an already-merged node is a no-op. Use this after reviewing dedup_candidates to resolve ambiguous duplicates.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoOptional project or workspace name used to partition memory.
agent_idNoOptional agent or client identifier used to partition memory.
node_idsYesList of node IDs to merge into the canonical node.
session_idNoOptional conversation or run identifier used to partition memory.
canonical_idYesThe canonical node ID to merge into.

TDQS

A4.4/5.0
Behavior5/5

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

Discloses key behaviors: aliases and edges are transferred, merged nodes are deleted, and the operation is idempotent. No annotations present, so description carries full burden and does so well.

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

Conciseness5/5

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

Four sentences, front-loaded with main action. No redundant or extraneous information; every sentence adds value.

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

Completeness4/5

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

Covers key behavioral aspects and usage context. No output schema, but description explains what happens to affected data. Could mention success/failure indication but not critical for a merge tool.

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

Parameters3/5

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

Schema coverage is 100%, and the description adds minimal extra meaning beyond parameter names and schema descriptions. Baseline 3 is appropriate since no additional semantic guidance needed.

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

Purpose5/5

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

The description clearly states the tool merges multiple nodes into one canonical node, specifying aliases, edges, and deletion. It distinguishes from dedup_candidates by positioning this tool as a manual resolution step after review.

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

Usage Guidelines4/5

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

Explicitly advises using after reviewing dedup_candidates, providing clear context. Does not mention alternative tools like merge, but the stated usage is sufficient for this purpose.

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

clear_allA

Delete all graph memory data for the current tenant. Requires confirm=true. This does not remove API keys or tenant metadata.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNoMust be true to perform the destructive clear operation.
dry_runNoPreview the clear operation without deleting data.

TDQS

A3.6/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 discloses the destructive action and what remains, but omits details about the dry_run parameter, permissions required, reversibility, or any side effects. More context would improve safety awareness.

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 efficiently convey the purpose and a key requirement. No extraneous information; front-loaded with the primary action.

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

Completeness4/5

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

For a destructive tool with two simple parameters and no output schema, the description covers the essential behavior. It misses some completeness (e.g., dry_run effect, permissions), but is largely sufficient.

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

Parameters3/5

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

Schema coverage is 100%, and the schema already describes both parameters. The description adds minimal value by reiterating that confirm must be true for deletion, but does not explain dry_run behavior. Baseline 3 is appropriate.

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

Purpose4/5

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

The description clearly states the tool deletes all graph memory data for the current tenant, specifying both what it does and what it does not affect (API keys, tenant metadata). However, it does not explicitly differentiate from sibling tools like clear_project or clear_session, which likely have similar but scoped behavior.

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 mentions that confirm=true is required, providing one guideline. However, it lacks explicit context on when to use this tool versus alternatives such as clear_project or clear_session, and gives no 'when-not' guidance.

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

clear_projectA

Delete all memory data for one project/repository, including nodes, transcripts, repos, context windows, and connected edges. Requires confirm=true.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNoMust be true to perform the destructive clear operation.
dry_runNoPreview the clear operation without deleting data.
projectYesProject/repository scope to clear.

TDQS

A3.8/5.0
Behavior4/5

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

No annotations present, so description covers destructive nature, lists affected data, and explains confirm safety mechanism along with dry_run preview. Could add permission or recovery details.

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-sentence description is concise and front-loaded with the main action. Could use more structured listing but no wasted words.

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?

Adequately describes destructive operation and safety options, but lacks details on recovery, permissions, or return value. Acceptable given no output schema.

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

Parameters3/5

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

Schema covers all parameters with descriptions (100% coverage). Description reiterates confirm requirement and dry_run preview but adds minimal extra meaning beyond schema.

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

Purpose5/5

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

Description clearly states it deletes all memory data for one project/repository, listing specific items (nodes, transcripts, repos, context windows, edges). Scope is distinguished from siblings like clear_all (all projects) and clear_session (session).

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

Usage Guidelines3/5

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

Implies usage for clearing a single project given confirm=true, but lacks explicit guidance on when to use versus siblings like clear_all or clear_session. No exclusions or prerequisites mentioned besides confirmation.

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

clear_sessionA

Delete all memory data for one session/context window stream, including nodes, transcripts, context windows, and connected edges. Requires confirm=true.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNoMust be true to perform the destructive clear operation.
dry_runNoPreview the clear operation without deleting data.
session_idYesSession identifier to clear.

TDQS

A4.2/5.0
Behavior4/5

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

Without annotations, the description effectively discloses that the tool is destructive and lists what is deleted. However, it does not mention irreversibility or required permissions, which would add further transparency.

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

Conciseness5/5

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

The description is extremely concise—two sentences, front-loaded with the primary action, and no extraneous information. Every word contributes value.

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

Completeness4/5

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

Given no output schema and straightforward functionality, the description covers the essential behavior: what is deleted, scope, and required parameter. It lacks a note on return value or final state, but overall it is adequate for an agent to use the tool correctly.

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 baseline is 3. The description adds minimal parameter insight beyond the schema; it only reiterates the confirm requirement, which is already documented in the schema.

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

Purpose5/5

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

The description clearly states the action: delete all memory data for one session/context window stream. It lists specific data types (nodes, transcripts, context windows, connected edges) and distinguishes from siblings like 'clear_all' and 'clear_project' by specifying scope to one session.

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

Usage Guidelines4/5

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

The description explicitly requires 'confirm=true' to execute the destructive operation, providing a clear usage condition. It does not explicitly contrast with siblings, but the scope is implied by the tool name and description.

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

close_context_windowA

Close a context window, recompute its final graph embedding, refresh node counts, and derive cross-window edges. Use when a chat/session is complete.

ParametersJSON Schema
NameRequiredDescriptionDefault
window_idYesID of the context window to close.

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. It discloses internal actions (recompute embedding, refresh counts, derive edges) beyond the user-facing close action. While it stops short of explaining authorization needs or irreversible effects, it provides meaningful behavioral context.

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

Conciseness5/5

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

The description is extremely concise: two sentences with no wasted words. The action verb 'close' is front-loaded, and the supporting details follow efficiently.

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

Completeness3/5

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

The tool has no output schema, so the description should explain return values or side effects. It does not address what the tool returns or whether it is reversible. Additionally, with no annotations, more behavioral context (e.g., permissions, performance) would be beneficial. It is minimally complete but has clear 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 100%, so baseline is 3. The description does not add extra meaning to the 'window_id' parameter beyond what the schema already describes. Parameter semantics are adequate but not enhanced.

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

Purpose5/5

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

The description clearly states the tool closes a context window and lists specific operations (recompute embedding, refresh counts, derive cross-window edges). It uses a specific verb-resource pair and distinguishes from siblings like 'list_context_windows' or 'get_context_window' by indicating it is a closing action.

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

Usage Guidelines4/5

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

The description includes 'Use when a chat/session is complete,' which provides clear context for when to invoke the tool. However, it does not explicitly mention when not to use it or suggest alternative tools, which would strengthen guidelines.

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

commitA

Snapshot the current memory graph to a portable file (waggle commit). Exports a JSON backup for migration, restore drills, or offline archive. Use commit_format='abhi' (default) for a full .abhi export, or 'backup' for a raw JSON backup. Returns the output path, schema version, and object counts.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoBundle mode: prime exports scoped memory, query exports query-focused context.prime
forceNoOverride the secret-scan refusal if transcript records contain likely secrets. Use only after deliberate review.
queryNoOptional query used when commit_format='bundle' and mode='query'.
formatNoContext bundle output format.both
projectNoOptional project or workspace name used to partition memory.
agent_idNoOptional agent or client identifier used to partition memory.
audienceNoTarget audience for bundle formatting.llm
max_depthNoRelationship traversal depth for context bundle retrieval.
max_nodesNoMaximum number of nodes to include in a context bundle.
session_idNoOptional conversation or run identifier used to partition memory.
output_pathNoOptional destination file path. If omitted, Waggle chooses an export path.
commit_formatNo'abhi' (default) exports a validated .abhi memory file; 'backup' exports a raw JSON backup; 'bundle' exports a portable Markdown/JSON context bundle.abhi
include_edgesNoWhether context bundles should include graph edges.
retrieval_modeNoRetrieval strategy for query-mode context bundles.hybrid
include_timestampsNoWhether context bundles should include timestamps.
include_source_promptNoWhether context bundles should include stored source prompts.
include_low_confidence_edgesNoWhen true, include RELATES_TO edges with edge_confidence < 0.7 that are normally filtered from exports.

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 burden. It discloses that the tool exports a JSON backup and returns the output path, schema version, and object counts. However, it omits behavioral details like the secret-scan refusal (only hinted in the force parameter) and file overwrite behavior. This is a moderate disclosure but leaves gaps.

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 three sentences, front-loaded with the core purpose, followed by use cases and return value summary. Every sentence adds meaningful information without wasted words.

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

Completeness3/5

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

For a tool with 17 parameters and no output schema, the description covers the high-level purpose and return values but omits the 'bundle' commit_format entirely and does not mention the secret-scan safety mechanism. This leaves the description incomplete for a tool of this complexity, though the schema fills many 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 description coverage is 100%, so the baseline is 3. The description adds some context around commit_format by explaining the default and backup option, but it does not significantly enhance understanding beyond the schema's own parameter descriptions. No gaps to compensate for, but also no extra 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 opens with a specific verb+resource: 'Snapshot the current memory graph to a portable file (waggle commit).' It clearly distinguishes this from sibling export tools by emphasizing a portable backup/archive focus rather than visualization or Markdown export. The mention of 'waggle commit' reinforces the tool's identity.

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 clear use cases: 'migration, restore drills, or offline archive.' It also explains when to use commit_format='abhi' vs 'backup'. However, it does not explicitly name alternatives or state when not to use this tool, so it stops short of a 5.

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

debug_retrievalA

Diagnose memory retrieval ranking for a query. Returns query embedding preview, context-window routing scores, selected windows, flat top nodes, and tiered top nodes for comparison.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesNatural-language search query to diagnose.
projectNoOptional project or workspace name used to partition memory.
agent_idNoOptional agent or client identifier used to partition memory.
max_depthNoRelationship traversal depth for the flat retrieval comparison.
max_nodesNoMaximum number of flat and tiered node matches to include.
session_idNoOptional conversation or run identifier used to partition memory.
retrieval_modeNoWhich retrieval stack to diagnose.hybrid

TDQS

A3.8/5.0
Behavior3/5

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

No annotations exist, so description carries full burden. It lists return components and implies read-only diagnostic behavior, but lacks explicit statements about side effects, permissions, or constraints.

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

Conciseness5/5

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

Two sentences with no waste. First sentence states purpose, second lists return items. Essential information is front-loaded.

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

Completeness4/5

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

Given no output schema, description compensates by listing return components. It covers purpose and output well, though could mention it is for debugging only and not for production retrieval.

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 schema already explains parameters. Description adds no additional meaning beyond summarizing return types, thus meets baseline with no extra 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?

Description uses specific verb 'Diagnose' and resource 'memory retrieval ranking', clearly distinguishing it from sibling tools like query_graph or get_related. It lists exact return components, making purpose unambiguous.

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

Usage Guidelines3/5

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

Description implies diagnostic use but does not explicitly state when to prefer this tool over alternatives or when not to use it. No contextual guidance is provided.

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

decompose_and_storeA

Break long or complex content into atomic memory nodes, store them automatically, and create inferred edges. Use for notes, summaries, or multi-fact passages. Returns the stored subgraph.

ParametersJSON Schema
NameRequiredDescriptionDefault
contentYesLong-form content to decompose into memory nodes.
contextNoOptional background that helps classify and connect extracted memories.

TDQS

A4/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 full burden. It explains the core behavior (decompose, store, infer edges) and return value, but lacks details on side effects, permissions, or error handling. This is adequate but not thorough.

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

Conciseness5/5

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

Two sentences with no wasted words. First sentence states the action, second sentence provides usage guidance and return value. Perfectly front-loaded.

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

Completeness4/5

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

The description covers the tool's high-level purpose, return value, and usage examples. It does not explain 'atomic memory nodes' or the format of the subgraph, but is otherwise complete for a tool with no output schema.

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?

Both parameters have schema descriptions with 100% coverage. The tool's description repeats the schema information without adding new details about parameter formats or constraints. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool's function: breaking content into atomic memory nodes, storing them, and creating inferred edges. It distinguishes from siblings like store_node (single node storage) and store_edge (edge creation) by performing both actions automatically.

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

Usage Guidelines4/5

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

The description explicitly says 'Use for notes, summaries, or multi-fact passages,' providing clear context. However, it does not exclude cases where a simpler tool (e.g., store_node) would be more appropriate, nor explicitly name alternatives.

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

dedup_candidatesA

Return pairs of nodes whose embeddings are above a threshold but below the auto-merge threshold. Intended for human review before calling canonicalize_node. Returns pairs sorted by descending similarity so the most likely duplicates appear first.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoOptional project scope to filter candidates.
agent_idNoOptional agent scope to filter candidates.
thresholdNoMinimum cosine similarity to report (default 0.85).
session_idNoOptional session scope to filter candidates.

TDQS

A4.6/5.0
Behavior4/5

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

Discloses output (sorted pairs), exclusion of auto-merge pairs, and sorting behavior. Though no annotations, the description adds good behavioral context, but lacks explicit side-effect statements.

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 concise sentences, each adding distinct value: action, purpose, output characteristic. No redundancy.

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

Completeness4/5

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

No output schema, but description explains output (sorted pairs). References auto-merge threshold concept. Could detail pair structure more, but sufficient.

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

Parameters4/5

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

Schema coverage is 100% with descriptions. The description adds value by explaining the threshold parameter's role relative to the auto-merge threshold.

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

Purpose5/5

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

Description clearly states it returns pairs of nodes with embeddings between a threshold and auto-merge threshold, distinguished from sibling tools like canonicalize_node and merge.

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

Usage Guidelines5/5

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

Explicitly states intended use for human review before calling canonicalize_node, providing clear when-to-use context and implicit alternative.

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

delete_nodeA

Delete a node and all connected edges from persistent memory.

ParametersJSON Schema
NameRequiredDescriptionDefault
node_idYesID of the node to delete.

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description carries full burden. It discloses that deletion cascades to all connected edges, which is useful. However, it does not mention irreversibility, authorization needs, or potential conflicts (e.g., if edges are referenced elsewhere).

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

Conciseness5/5

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

The description is a single, clear sentence with no fluff. It is appropriately front-loaded and contains only essential information.

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

Completeness4/5

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

For a simple deletion tool with one required parameter and no output schema, the description covers the core functionality (node and edge deletion). It could add more context about reversibility or side effects, but is generally complete.

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

Parameters3/5

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

Schema description coverage is 100%, and the description adds no additional meaning beyond the schema. The parameter 'node_id' is fully explained in the schema, so the description offers no extra value for parameter semantics.

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

Purpose5/5

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

The description clearly states the verb 'delete', the resource 'node and all connected edges', and the effect 'from persistent memory'. It distinguishes the tool from siblings like 'store_node' or 'update_node' by specifying the destructive action.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives (e.g., update_node or get_stats). There is no indication of prerequisites, limitations, or 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.

diffB

Compare two .abhi memory files (waggle diff). Reports structural graph changes — added/removed/updated nodes and edges — plus lightweight semantic changes. The output is the screenshot that goes on the homepage.

ParametersJSON Schema
NameRequiredDescriptionDefault
input_path_aYesPath to the first .abhi file (base / ours).
input_path_bYesPath to the second .abhi file (theirs / feature branch).

TDQS

B3.4/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden. It mentions the output is a screenshot for the homepage, but does not disclose whether the tool is read-only or has side effects such as file creation. Critical behavioral context is missing.

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

Conciseness5/5

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

The description is concise, consisting of two sentences. The first communicates the primary action and result, and the second adds output detail. No unnecessary words.

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

Completeness3/5

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

The description covers the main function but lacks detail about the output format (e.g., screenshot as an image file). Since there is no output schema, the description should specify what the tool returns in terms the agent can use.

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

Parameters4/5

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

The schema covers both parameters with descriptions. The description adds value by interpreting 'input_path_a' as base/ours and 'input_path_b' as theirs/feature branch, providing meaningful context beyond the schema's literal path descriptions.

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

Purpose4/5

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

The description clearly states it compares two .abhi files and reports structural and semantic changes. The verb 'Compare' and resource 'two .abhi memory files' are specific. However, it does not explicitly differentiate from the sibling tool 'graph_diff', which may cause confusion.

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

Usage Guidelines3/5

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

The description implies usage for comparing .abhi files to see differences, but it does not provide explicit guidance on when to use this tool versus alternatives, nor does it mention exclusions or prerequisites.

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

edge_quality_reportA

Audit the quality of relationship edges in the memory graph. Returns counts per edge type, average edge_confidence per type, and the top-10 highest- and lowest-confidence edges for each type. Useful for diagnosing graph health and identifying noisy RELATES_TO edges.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoOptional project or workspace name used to partition memory.
agent_idNoOptional agent or client identifier used to partition memory.
session_idNoOptional conversation or run identifier used to partition memory.

TDQS

A4.3/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. The description implies a read-only audit (no destructive hints), but does not explicitly state it is non-mutating or mention any side effects. However, the behavioral details given (outputs) are sufficient for safe invocation.

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

Conciseness5/5

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

Two concise sentences: first states action and output, second states usefulness. No wasted words, front-loaded with key information.

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

Completeness5/5

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

Despite lacking an output schema, the description fully covers return values (counts, avg confidence, top-10 edges). Parameters are well-documented in schema. All necessary context for confident usage is provided.

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

Parameters3/5

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

Input schema has 100% description coverage, with each parameter (project, agent_id, session_id) clearly explained. The description adds no additional meaning beyond the schema, so baseline score of 3 is appropriate.

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

Purpose5/5

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

Description clearly states the tool audits edge quality, lists specific outputs (counts, avg confidence, top-10 edges), and explicitly differentiates its diagnostic purpose (e.g., identifying noisy RELATES_TO edges) from sibling tools like get_stats or fsck.

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?

Describes when to use it ('diagnosing graph health'), but does not explicitly mention when not to use it or alternatives. Still provides clear context for usage.

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

export_graph_htmlA

Export the current memory graph as an interactive HTML visualization. Use when a human needs to inspect the graph visually. Returns the output path and graph counts.

ParametersJSON Schema
NameRequiredDescriptionDefault
output_pathNoOptional destination HTML file path. If omitted, Waggle chooses an export path.
include_physicsNoWhether the visualization should use physics-based node layout.

TDQS

A4/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 the return value ('output path and graph counts') and indicates a read-like operation, but does not specify side effects, permissions, or whether the graph state is altered.

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 three sentences, front-loaded with the core purpose, and contains no extraneous information. Every sentence adds value.

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

Completeness4/5

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

Given the tool's simplicity (2 optional parameters, no output schema, no annotations), the description provides the essential information: purpose, output, and guidance. It could mention potential file size limitations or the need for a browser to view, but is adequate.

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 both parameters. The description adds no additional meaning beyond what's in the schema, meeting the baseline of 3.

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

Purpose5/5

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

The description clearly states the verb (Export), resource (current memory graph), and output format (interactive HTML visualization). It distinguishes from siblings like export_context_bundle or export_graph_backup by specifying the format and purpose.

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

Usage Guidelines4/5

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

The description provides a clear usage context: 'Use when a human needs to inspect the graph visually.' It implicitly differentiates from other export tools but does not explicitly mention when not to use or name alternatives.

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

export_markdown_vaultA

Export the current graph as an Obsidian-compatible Markdown vault. Use when a human wants browsable note files with graph links. Returns written files and graph counts.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoOptional project or workspace name used to partition memory.
agent_idNoOptional agent or client identifier used to partition memory.
root_pathYesDestination directory for the Markdown vault.
session_idNoOptional conversation or run identifier used to partition memory.

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description must disclose behavior. It mentions side effects (writing files) and output (counts), but lacks details on whether the tool modifies the graph, required permissions, or error conditions. This is adequate but not thorough.

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

Conciseness5/5

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

Two sentences with no wasted words. The purpose is front-loaded, and the description is structurally efficient.

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

Completeness4/5

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

Given no output schema, the description mentions return values (written files and graph counts). It covers the essential behavior for a file-export tool, though it could elaborate on the graph counts format or implications of partitioning parameters.

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

Parameters3/5

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

Input schema has 100% description coverage, so parameters are already well-documented. The description does not add extra meaning beyond the schema; it only restates the root_path purpose. No additional clarifications for agent_id, project, or session_id.

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

Purpose5/5

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

The description clearly states the tool exports the current graph as an Obsidian-compatible Markdown vault, specifying the purpose (human browsable notes with graph links) and output (written files and graph counts). This distinguishes it from sibling export tools like export_graph_html or export_context_bundle.

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

Usage Guidelines4/5

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

The description explicitly says 'Use when a human wants browsable note files with graph links,' giving a clear usage context. However, it does not mention when not to use it or suggest alternatives among siblings like import_markdown_vault or export_graph_backup.

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

fsckA

Validate an .abhi memory file without importing it (waggle fsck). Verifies integrity hash, schema compliance, and constraint satisfaction. Like git fsck — run this before trusting a file you received.

ParametersJSON Schema
NameRequiredDescriptionDefault
input_pathYesPath to the .abhi file to validate.

TDQS

A4.2/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. It discloses that the tool validates integrity, schema, and constraints, and does not import. This adequately covers behavioral traits, though more detail on error output could improve transparency.

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 three short sentences, each adding value. It starts with the core action, then details checks, and ends with an analogy. No extraneous words; perfectly concise.

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

Completeness4/5

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

Given the tool's simplicity (one parameter, no output schema, no annotations), the description covers purpose, behavior, and usage adequately. It could mention error handling or return format, but the core information is present and sufficient for an AI agent.

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 single parameter 'input_path' is described in the schema as 'Path to the .abhi file to validate.' The tool description does not add any additional meaning beyond this, meeting the baseline for 100% schema description coverage.

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

Purpose5/5

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

The description clearly states the tool validates an .abhi memory file without importing it, specifying the verb 'validate' and the resource. It distinguishes from importing and provides an analogy to git fsck, making the purpose explicit and distinct from sibling tools.

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

Usage Guidelines4/5

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

The description advises 'run this before trusting a file you received,' giving clear usage context. While it doesn't explicitly list alternatives or when not to use, the analogy and context provide sufficient guidance for a simple validation tool.

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

get_context_windowA

Inspect one context window, including its nodes and links to other context windows. Use when auditing what a conversation/session contributed to memory.

ParametersJSON Schema
NameRequiredDescriptionDefault
window_idYesID of the context window to inspect.
include_nodesNoWhether to include memory nodes stored in this context window.

TDQS

A4/5.0
Behavior3/5

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

No annotations provided, so description carries burden. It notes output includes nodes and links, but does not explicitly state read-only nature or idempotency, which would be helpful.

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

Conciseness5/5

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

Two sentences: one for what the tool does, one for when to use it. No fluff, highly efficient.

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

Completeness4/5

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

With no output schema and few parameters, the description covers purpose and output essentials. Could add a note on side effects (or lack thereof) for completeness.

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

Parameters3/5

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

Schema description coverage is 100%, so baseline is 3. Description does not add extra meaning beyond schema; it restates overall purpose without detailing parameters.

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

Purpose5/5

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

The description clearly states the verb 'inspect' and resource 'one context window', distinguishing it from siblings like 'list_context_windows' or 'close_context_window'.

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 specific scenario ('auditing what a conversation/session contributed to memory'), implying when to use. Does not explicitly state when not to use, but context makes it clear.

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

get_node_historyA

Inspect one memory node's evidence, validity window, and connected context. Use when auditing why a memory exists or how it changed. Returns the node, evidence records, related nodes, and edges.

ParametersJSON Schema
NameRequiredDescriptionDefault
node_idYesID of the node to inspect.
max_depthNoRelationship traversal depth for related context.

TDQS

A4.3/5.0
Behavior4/5

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

Describes what it returns (node, evidence records, related nodes, edges) and infers read-only operation. With no annotations, it covers behavioral intent well, though could add 'does not modify data'.

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: verb-first, efficient, no filler. Every phrase adds value.

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

Completeness5/5

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

Fully explains what the tool returns despite no output schema. For a 2-param tool with no nested objects, description is complete.

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

Parameters3/5

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

Schema coverage is 100%, so baseline of 3. Description aligns with schema but adds no extra depth beyond confirming the inspection scope.

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

Purpose5/5

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

Clearly identifies the resource (one memory node) and the verb (inspect). Distinct from siblings like 'get_related' or 'query_graph' by focusing on evidence, validity window, and connected context.

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

Usage Guidelines4/5

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

Explicitly states when to use: 'when auditing why a memory exists or how it changed.' Provides clear context, though no explicit exclusion of alternatives.

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

get_statsA

Return high-level statistics about the current memory graph. Use for health checks or quick summaries. Returns node and edge counts, node type breakdowns, and recent or highly connected nodes.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries full burden. It correctly describes a read-only operation returning statistics, with no side effects. It does not discuss performance or caching, but that is acceptable for a simple stats tool.

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

Conciseness5/5

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

The description is two sentences long, front-loaded with purpose and details. Every sentence adds value with no waste.

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

Completeness4/5

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

Given no parameters or output schema, the description covers what is returned and when to use it. It lacks details on format or performance but is sufficient for the tool's simplicity.

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

Parameters4/5

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

There are no parameters, so the description does not need to add meaning beyond the schema. Schema coverage is 100% (trivial), baseline is 4.

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

Purpose5/5

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

The description clearly states the tool returns high-level statistics about the current memory graph, listing specific details like node and edge counts, node type breakdowns, and recent/highly connected nodes. It distinguishes itself from sibling tools (e.g., get_related, get_topics) by focusing on aggregate metrics.

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

Usage Guidelines4/5

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

The description explicitly says 'Use for health checks or quick summaries,' providing clear guidance on when to use the tool. It does not mention when not to use it or alternatives, but the use case is well-defined.

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

get_topicsA

Detect topic clusters in the graph using community detection. Use to understand the main themes in memory. Returns labeled clusters with representative nodes and tags. Note: scope filtering (project, agent_id, session_id) is optional and silently ignored — topic detection always runs across the full tenant graph.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoOptional project or workspace name used to partition memory.
agent_idNoOptional agent or client identifier used to partition memory.
session_idNoOptional conversation or run identifier used to partition memory.

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 full burden and excels by disclosing that scope filtering parameters are silently ignored and that topic detection always runs across the full tenant graph. This is critical behavioral information beyond what the schema provides.

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

Conciseness5/5

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

The description is two sentences, front-loaded with purpose and key behavior, with no extraneous content. Every sentence earns its place.

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

Completeness4/5

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

Given no output schema, the description mentions return type (labeled clusters with representative nodes and tags), which is adequate for an agent to infer the result structure. However, it could briefly describe the exact output format (e.g., array or object) for added clarity.

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?

Although all three parameters have schema descriptions indicating they partition memory, the description adds essential meaning by stating they are silently ignored and do not affect the operation. This is a significant correction to the agent's understanding.

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

Purpose5/5

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

The description clearly states the tool detects topic clusters using community detection, returns labeled clusters with representative nodes and tags, and explains its purpose: to understand main themes in memory. This is specific and distinguishes it from siblings like query_graph or get_related.

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

Usage Guidelines4/5

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

The description explicitly says 'Use to understand the main themes in memory' and notes that scope filtering parameters are silently ignored, providing clear guidance on when to use and an important behavioral caveat. It does not explicitly mention when not to use or alternatives, but the context is clear.

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

graph_diffA

Show what changed in the memory graph recently, including added nodes, updated nodes, created edges, and contradiction edges. Use for review or handoff. Returns a serialized graph diff.

ParametersJSON Schema
NameRequiredDescriptionDefault
sinceNoLookback window such as '24h', '7d', or an ISO-like timestamp.24h

TDQS

A4.2/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 mentions the tool shows changes and returns a serialized graph diff but does not disclose whether the tool is read-only or if there are any side effects, rate limits, or authorization requirements.

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

Conciseness5/5

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

Three sentences with no redundant information. The description front-loads the core functionality and then provides usage guidance, making it efficient and easy to parse.

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

Completeness4/5

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

Given the tool's simplicity (one optional parameter, no output schema), the description covers purpose, return type, and usage context. It could be slightly enhanced by describing the output structure, but overall sufficient.

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

Parameters4/5

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

The input schema has one parameter with a detailed description explaining the format (e.g., '24h', '7d', ISO timestamp). Schema coverage is 100%, but the description adds value by clarifying acceptable values, justifying a score above baseline 3.

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

Purpose5/5

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

The description clearly states the tool shows changes in the memory graph, specifying added nodes, updated nodes, created edges, and contradiction edges. This distinguishes it from sibling tools like query_graph or get_stats.

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

Usage Guidelines4/5

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

Explicitly recommends use 'for review or handoff,' providing clear context for when to invoke the tool. However, it does not specify when not to use it or mention specific alternatives.

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

grepB

Execute a saved or ad hoc query against an .abhi file (waggle grep). Triggers the file's on_query event actions and returns matching nodes.

ParametersJSON Schema
NameRequiredDescriptionDefault
query_idNoOptional saved query id from the file.
input_pathYesPath to the .abhi file to query.
query_textNoOptional ad hoc query text to execute.

TDQS

B3.2/5.0
Behavior3/5

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

Without annotations, the description partially compensates by noting it triggers on_query events and returns nodes. However, it doesn't clarify whether the operation is read-only or has side effects, nor the behavior when both query_id and query_text are provided.

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

Conciseness5/5

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

The description is a single well-structured sentence that front-loads the main action. It is concise with no unnecessary words.

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

Completeness2/5

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

The description lacks important details for effective use, such as behavior when both optional parameters are provided, return value format, or error conditions. Despite good schema coverage, the absence of output schema and annotations leaves 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 100% and descriptions for each parameter are minimal but clear. The tool description adds no additional semantic meaning beyond what the schema provides, so a baseline score of 3 is appropriate.

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

Purpose4/5

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

The description clearly states it executes saved or ad hoc queries on .abhi files, specifying the action and resource. However, it doesn't explicitly distinguish from sibling tools like query_graph, which may have overlapping functionality.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives. The description does not mention prerequisites, mutual exclusivity of parameters, or when to choose saved vs ad hoc queries.

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

import_markdown_vaultA

Import an Obsidian-compatible Markdown vault into the current graph non-destructively. Use to sync edited vault notes back into memory. Returns created, updated, deleted-edge, and conflict counts.

ParametersJSON Schema
NameRequiredDescriptionDefault
root_pathYesSource directory of the Markdown vault to import.

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, description carries full burden. Discloses non-destructive behavior and return format (created, updated, deleted-edge, conflict counts). Lacks details on authorization or rate limits, but adequate for a simple import tool.

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. First sentence states purpose and key trait, second gives usage and return info. Highly concise and front-loaded.

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

Completeness4/5

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

Given single parameter and no output schema, description explains what the tool does and what it returns. Mentions conflict counts, which is important. Could mention error scenarios but not necessary for typical use.

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

Parameters3/5

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

Schema coverage is 100% and already describes 'root_path' as 'Source directory of the Markdown vault to import.' Description does not add extra meaning beyond schema, baseline score of 3 is appropriate.

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

Purpose5/5

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

Clearly states verb (import), resource (Obsidian Markdown vault), and context (into current graph). Distinguishes from siblings like export_markdown_vault and import_graph_backup by specifying 'non-destructive' and 'sync edited vault notes back into memory'.

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 clear use case: 'sync edited vault notes back into memory'. Implicitly indicates when to use (after editing vault externally). Does not explicitly state when not to use or mention alternatives, but context is clear.

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

list_conflictsA

List contradiction and update edges, with unresolved conflicts shown by default. Use to review memory disagreements before resolving them. Returns conflict entries with source and target nodes.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of conflicts to return.
include_resolvedNoWhether to include conflicts that were already marked resolved.

TDQS

A4/5.0
Behavior3/5

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

No annotations provided, so description carries burden. Discloses default filter (unresolved) and return structure (source and target nodes). Does not mention pagination, ordering, or potential side effects, but for a read-only listing this is adequate.

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

Conciseness5/5

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

Two sentences, front-loaded with action and default, no unnecessary words. Every sentence adds value.

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

Completeness4/5

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

Given two parameters and no output schema, description adequately covers purpose, default behavior, and return shape (conflict entries with source/target). Could mention ordering or result limits, but sufficient for most use cases.

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 baseline is 3. Description adds context that 'unresolved conflicts shown by default' aligns with include_resolved=false. No additional parameter-specific details beyond schema.

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

Purpose5/5

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

Clearly states verb ('List') and resource ('contradiction and update edges'), with default behavior ('unresolved conflicts shown by default'). Distinguishes from siblings like resolve_conflict.

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

Usage Guidelines4/5

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

Explicitly says 'Use to review memory disagreements before resolving them', providing clear when-to-use context. No explicit when-not-to or alternative tools mentioned, but the purpose is specific.

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

list_context_scopesA

List known agent, project, and session scope values stored in the current tenant graph. Use before filtering memory by scope. Returns arrays of scope identifiers.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior3/5

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

No annotations are provided, so the description bears the full burden. It states the tool lists values and returns arrays, but no additional behavioral traits (e.g., read-only, potential delays) are disclosed. Adequate but minimal.

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

Conciseness5/5

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

Three sentences, all essential, front-loaded with the action and resource. No redundant information. Every sentence serves a purpose.

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

Completeness5/5

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

For a zero-parameter, no-output-schema tool, the description is complete: it explains what it does, why to use it, and what it returns (arrays of scope identifiers). No gaps.

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

Parameters4/5

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

The input schema has zero parameters, so schema coverage is 100%. The baseline is 4 according to the rules, and the description does not need to add param meaning. It appropriately omits param details.

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

Purpose5/5

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

The description clearly states the verb 'list' and the resource 'scope values' (agent, project, session). It distinguishes from sibling tools by specifying the context (current tenant graph) and the return type (arrays of scope identifiers).

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

Usage Guidelines4/5

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

Explicitly says 'Use before filtering memory by scope.' This provides clear context on when to invoke this tool. No alternatives or exclusions are mentioned, but the guidance is helpful.

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

list_context_windowsA

List context windows for a project. Use to inspect chat/session-level memory containers, their status, node counts, and update times.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of context windows to return.
statusNoOptional status filter for returned windows.
projectNoOptional project/repository scope to filter windows.

TDQS

A3.8/5.0
Behavior3/5

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

No annotations provided, so description bears full burden. It mentions return fields (status, node counts, update times) but does not disclose authentication requirements, rate limits, or any side effects. The read-only nature is implied by 'inspect' but not explicitly stated.

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

Conciseness5/5

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

Two sentences, no redundancy. First sentence states core action, second adds useful detail about what the tool returns. Every word 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?

Given the tool's simplicity (3 optional params, no output schema), the description adequately covers purpose and output fields (status, node counts, update times). Could be improved by explicitly noting 'returns a list of context windows' and that parameters are filters, but overall complete for a listing tool.

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

Parameters3/5

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

Schema coverage is 100% with each parameter having a description. The description adds no extra meaning beyond the schema, e.g., it does not explain that 'project' and 'status' are optional filters. Baseline 3 is appropriate since schema already clarifies parameters.

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

Purpose5/5

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

Description uses specific verb 'List' with resource 'context windows', clearly distinguishing from siblings like 'get_context_window' (singular) and 'close_context_window'. Also specifies the scope 'for a project' and the data fields (status, node counts, update times).

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

Usage Guidelines3/5

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

Description states 'Use to inspect chat/session-level memory containers', which implies usage context but does not explicitly state when not to use or provide alternatives like 'get_context_window' for a single window or 'close_context_window' for closing. The guidance is implicit but not directive.

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

load_abhi_chunksB

Load only selected or query-relevant chunks from an .abhi file for partial graph inspection.

ParametersJSON Schema
NameRequiredDescriptionDefault
query_idNoOptional saved query id used to select chunks.
chunk_idsNoOptional explicit chunk ids to load.
input_pathYesPath to the .abhi file to inspect.
query_textNoOptional ad hoc query text used to select chunks.

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, so the description must cover behavioral traits. It only states that chunks are loaded selectively, but does not disclose whether the operation is read-only, destructive, or requires specific permissions. There is no mention of error handling, performance implications, or side effects.

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

Conciseness5/5

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

The description is a single sentence that is clear and concise. Every word contributes value, with no redundancy or filler.

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

Completeness2/5

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

Given the lack of annotations and output schema, the description is insufficient. It does not explain what 'chunks' are, the return value, or how to interpret results. For a tool that loads data, more context about the output and behavior is needed.

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

Parameters3/5

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

Schema coverage is 100%, so each parameter is documented. The description adds minimal value by summarizing the overall behavior, but does not clarify parameter relationships (e.g., mutual exclusivity, required combinations). Baseline 3 is appropriate as the schema already does the heavy lifting.

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

Purpose5/5

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

The description clearly states the verb 'load', the resource 'chunks from an .abhi file', and the purpose 'for partial graph inspection'. It is specific and distinguishes from sibling tools like 'query_graph' by focusing on partial loading of chunks.

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 lacks explicit guidance on when to use this tool versus alternatives. It does not mention prerequisites, exclusions, or comparison to similar tools like 'query_graph' or 'load'. The phrase 'for partial graph inspection' provides minimal context but no clear decision rules.

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

mergeA

Three-way merge branching .abhi memory files (waggle merge). Merges left and right branches against a common base into one output file. Conflicts surface as CONTRADICTS edges — nobody else can do this. Use --merge-strategy to control winner selection when both sides changed the same object.

ParametersJSON Schema
NameRequiredDescriptionDefault
output_pathYesDestination path for the merged .abhi file.
merge_strategyNoWinner strategy when both sides changed the same object differently.prefer_right
base_input_pathYesPath to the common base .abhi file.
left_input_pathYesPath to the left branch .abhi file (ours).
right_input_pathYesPath to the right branch .abhi file (theirs).

TDQS

A3.6/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 reveals key behaviors: conflicts become CONTRADICTS edges and the merge strategy parameter. However, it does not disclose side effects like whether input files are modified, idempotency, or error conditions; some behavioral aspects remain unclear.

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 three sentences, each serving a distinct purpose: stating the tool's action, detailing conflict representation, and providing parameter usage. It is front-loaded with key information and contains no redundant or verbose language.

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?

Despite describing the merge operation and conflict handling, the description lacks crucial details: output format/structure, prerequisites (e.g., shared base), and error handling behaviors. Given no output schema, the description should explain what the output contains, which it does only minimally.

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

Parameters3/5

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

All 5 parameters are documented in the schema with descriptions. The tool description repeats the merge strategy guidance but adds no new meaning beyond what the schema already provides. Since schema coverage is 100%, the description does not significantly enhance parameter understanding.

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

Purpose5/5

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

The description clearly states the tool performs a three-way merge of .abhi memory files, specifying the verb 'merge' and the resource. It uniquely positions itself by claiming 'nobody else can do this', distinguishing it from siblings like diff or resolve_conflict.

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 implicitly tells when to use (merging two branches against a base) and provides a concrete hint about the --merge-strategy parameter. However, it does not explicitly contrast with alternatives like diff for viewing differences or resolve_conflict for handling specific conflicts.

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

observe_conversationA

Automatically observe a completed user-assistant turn. ALWAYS persists the verbatim turn first. Then runs extraction (graph inference) as optional enrichment. If extraction fails, the verbatim turn is still stored. Use after turns containing preferences, decisions, constraints, requirements, corrections, project facts, or meaningful task outcomes. Do not ask the user to trigger this. Returns: turn_id, verbatim_stored (bool), nodes_extracted (count), edges_inferred (count), extraction_errors (non-fatal). Required fields: 'user_message' (the user's text) and 'assistant_response' (the assistant's reply). Do NOT use 'user_text' or 'assistant_text' — those field names are not accepted.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoOptional project or workspace name used to partition memory.
agent_idNoOptional agent or client identifier used to partition memory.
session_idNoOptional conversation or run identifier used to partition memory.
user_messageYesThe user's message from the completed turn.
assistant_responseYesThe assistant's response from the completed turn.

TDQS

A4.6/5.0
Behavior5/5

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

Since no annotations are provided, the description fully discloses behavior: always persists verbatim, extraction is optional and non-fatal, and what happens on failure, along with return fields.

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

Conciseness4/5

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

The description is well-structured with distinct sections, but slightly lengthy with some redundancy; however, it front-loads the core purpose.

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

Completeness5/5

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

Given no output schema, the description covers return values, error handling, and required fields thoroughly, making it complete for a 5-parameter tool.

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

Parameters4/5

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

Schema coverage is 100%, but the description adds value by warning against incorrect field names and explaining the optional parameters for partitioning.

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 specifies the action ('observe') and resource ('completed user-assistant turn'), and distinguishes from siblings like 'store_node' by focusing on persisting turns and optional graph extraction.

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 explicitly states when to use the tool (after turns with specific content) and instructs not to ask the user to trigger it, but does not name alternative tools for when not to use.

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

prime_contextA

Automatically build a compact context brief at the start of a scoped conversation or before work that needs continuity. Use to hydrate an assistant with the most relevant scoped memories. Returns summary text plus nodes and edges.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoOptional project or workspace name used to partition memory.
agent_idNoOptional agent or client identifier used to partition memory.
session_idNoOptional conversation or run identifier used to partition memory.

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description must carry the burden. It states the tool automatically builds a context brief and returns data, implying a read-like operation, but does not detail side effects, authorization needs, or whether memory is modified. The transparency is adequate but lacks depth.

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

Conciseness5/5

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

The description is two sentences with no wasted words. It front-loads the action and timing, then explains usage and returns. Highly efficient and well-structured.

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

Completeness4/5

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

Given the tool has 3 optional parameters, no output schema, and a medium-complexity context, the description covers when to use, what it does, and what it returns. It does not explain memory selection logic or node/edge format, but is mostly complete for an agent to decide to invoke it.

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

Parameters3/5

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

Schema coverage is 100% with each parameter described as optional and used for memory partitioning. The description adds context about scoping, but does not provide additional meaning beyond the schema. Baseline 3 is appropriate.

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

Purpose4/5

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

The description clearly states the tool builds a compact context brief at conversation start, hydrates an assistant with scoped memories, and returns summary, nodes, and edges. This is a specific action with a clear purpose, though it does not explicitly differentiate from siblings like get_context_window or query_graph.

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

Usage Guidelines4/5

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

The description specifies when to use the tool: at the start of a scoped conversation or before continuity-dependent work. This provides clear context, but it does not include explicit when-not-to-use or alternative tool guidance.

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

pullB

Load a memory file into the current graph (waggle pull). Accepts a .abhi file (default) or a raw JSON backup. Runs integrity verification, schema validation, and constraint checks before merging. Returns counts for created and updated nodes and edges.

ParametersJSON Schema
NameRequiredDescriptionDefault
input_pathYesPath to the .abhi or JSON backup file to import.
pull_formatNo'abhi' (default) imports a .abhi memory file; 'backup' imports a raw JSON backup.abhi

TDQS

B3.4/5.0
Behavior3/5

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

The description discloses behavioral traits such as integrity verification, schema validation, constraint checks, and return counts. However, given no annotations, it misses details about whether merging overwrites existing data or conflicts are handled, which are relevant for a destructive 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?

The description consists of three compact sentences with the main action front-loaded. No extraneous information; every sentence adds useful detail.

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

Completeness3/5

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

The description covers format acceptance, validation steps, and return counts, which is adequate for a simple import tool. However, it does not specify whether existing data is overwritten or merged, nor does it describe error handling or performance implications, leaving some gaps.

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

Parameters4/5

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

With 100% schema coverage, the description adds value by explaining the default pull_format ('abhi') and the meaning of each enum option. This goes beyond the schema's basic enum listing.

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

Purpose4/5

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

The description clearly states the verb ('Load') and resource ('memory file into the current graph'), and specifies accepted formats (.abhi or JSON backup). It distinguishes from sibling import tools like 'import_markdown_vault' by focusing on .abhi and backup formats, but lacks explicit differentiation from 'load_abhi_chunks'.

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool versus alternatives like 'import_markdown_vault' or 'load_abhi_chunks'. The description implies file format usage but does not provide exclusion criteria or prerequisites.

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

query_graphA

Automatically search the memory graph before answering questions that may depend on prior context, user preferences, project decisions, constraints, or earlier conversation state. Returns a serialized subgraph with matching nodes and their connected neighborhood. Uses hybrid retrieval (transcript + graph) by default for robust fallback. Understands temporal references such as 'recently', 'latest', 'originally', and 'last week'. Benchmark modes: use retrieval_mode='graph' for graph-only (no verbatim fallback), 'verbatim' for transcript-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
as_ofNoISO-8601 datetime. When provided, return only nodes valid at that point in time (overrides include_invalidated).
queryYesNatural-language search query.
projectNoOptional project or workspace name used to partition memory.
agent_idNoOptional agent or client identifier used to partition memory.
max_depthNoRelationship traversal depth around matching nodes.
max_nodesNoMaximum number of matching nodes to return.
session_idNoOptional conversation or run identifier used to partition memory.
expand_depthNoOptional support expansion depth. At 1, graph mode may return up to twice max_nodes.
retrieval_modeNoRetrieval strategy: graph-only, verbatim transcript retrieval, or hybrid fusion with reranking.hybrid
include_invalidatedNoWhen true, include nodes whose valid_to has passed. Default false excludes expired nodes.

TDQS

A4.3/5.0
Behavior4/5

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

No annotations are provided, so the description carries full burden. It discloses that the tool returns a serialized subgraph, uses hybrid retrieval by default, understands temporal references, and describes benchmark modes. It does not cover permissions or side effects, but the behavioral traits are adequately transparent.

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

Conciseness4/5

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

The description is well-structured and front-loads the main purpose. It is somewhat lengthy but each sentence adds value. Minor redundancy in mode explanations could be tightened, but overall effective.

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

Completeness4/5

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

Given the tool's complexity (10 parameters, no output schema), the description covers essential aspects: when to use, retrieval modes, temporal understanding. It omits details on return format or pagination, but it is sufficiently complete for an agent to understand usage.

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

Parameters4/5

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

Schema coverage is 100%, baseline is 3. The description adds value by explaining retrieval modes and the 'as_of' parameter's behavior (overrides include_invalidated), providing context beyond the schema. Other parameters are not elaborated, but the added context for key parameters justifies a 4.

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

Purpose5/5

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

The description clearly states the tool searches the memory graph for prior context, returns a serialized subgraph, and specifies the default hybrid retrieval. It distinguishes from siblings like 'aggregate_graph' and 'build_context' by focusing on automatic search and temporal understanding.

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

Usage Guidelines4/5

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

The description explicitly recommends use 'before answering questions that may depend on prior context' and explains when to use different retrieval modes (graph-only, verbatim, hybrid). It does not explicitly list alternatives or exclusions, but the context is clear.

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

resolve_conflictA

Mark a contradiction or update edge as resolved without deleting the underlying history. Use after deciding how competing memories should be interpreted. Returns the resolved conflict entry. When winner is provided and the edge is CONTRADICTS or UPDATES, the losing node's valid_to is set to now, excluding it from future default queries.

ParametersJSON Schema
NameRequiredDescriptionDefault
winnerNoOptional node ID of the winning node. Must be source_id or target_id of the edge. When provided, the losing node's valid_to is set to now, superseding it.
edge_idYesID of the conflict edge to mark resolved.
resolution_noteNoOptional human-readable note explaining the resolution.

TDQS

A4.4/5.0
Behavior4/5

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

No annotations provided, so description carries the burden. Explains that when winner is provided, losing node's valid_to is set to now, superseding it. Discloses side effect of excluding from future queries. Could mention reversibility or permissions but sufficient.

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

Conciseness5/5

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

Two concise sentences front-loading the core purpose, then adding detail. Every sentence adds value. No redundancy.

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

Completeness4/5

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

Given moderate complexity and no output schema, description covers purpose, side effects, and parameter usage. Missing error conditions or prerequisites, but adequate for selection and basic invocation.

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

Parameters4/5

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

Schema coverage is 100%, baseline 3. Description adds context: winner must be source_id or target_id, and explains effect on losing node. Resolution_note described as optional. Adds meaning beyond schema.

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

Purpose5/5

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

Clearly states it marks a conflict or update edge as resolved without deleting history. Uses specific verb 'resolve' and resource 'conflict edge', distinguishing it from sibling 'list_conflicts' and 'update_node'.

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 context: 'Use after deciding how competing memories should be interpreted.' Does not explicitly mention when not to use or alternatives, but the context is clear.

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

showA

Inspect an .abhi memory file without loading it into the graph (waggle show). Returns summary stats, node/edge type breakdowns, and metadata counts. Like git show — quick read-only inspection of a commit object.

ParametersJSON Schema
NameRequiredDescriptionDefault
input_pathYesPath to the .abhi file to inspect.

TDQS

A4.2/5.0
Behavior4/5

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

No annotations are provided, so the description carries full burden. It discloses that the tool is read-only and returns summary stats, node/edge type breakdowns, and metadata counts. It does not mention error conditions or performance, but the read-only nature is well communicated.

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

Conciseness5/5

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

The description is extremely concise: two sentences plus a parenthetical. It front-loads the key action and constraint, then lists outputs and an analogy. Every sentence adds value without redundancy.

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

Completeness4/5

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

For a simple tool with one parameter and no output schema, the description covers inputs, behavior, and outputs at a high level. It could be more specific about the return format, but the information provided is sufficient for an agent to understand the tool's function.

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

Parameters3/5

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

The schema coverage is 100% with a clear parameter description. The tool description adds minor context by specifying the file type (.abhi) but does not provide extra details beyond the schema. The baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the verb 'inspect' and the resource '.abhi memory file', and explicitly distinguishes from loading into the graph ('without loading it into the graph'). The analogy to 'git show' reinforces the purpose, and the sibling list includes load_abhi_chunks, so differentiation is clear.

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

Usage Guidelines4/5

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

The description provides clear context by stating 'without loading it into the graph' and comparing to 'git show'. However, it does not explicitly list when to use this tool versus specific alternatives, nor does it mention exclusions or prerequisites.

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

store_edgeA

Create a relationship between two stored nodes. Use this immediately after storing related nodes so the memory graph preserves structure, updates, and conflicts.

ParametersJSON Schema
NameRequiredDescriptionDefault
weightNoOptional strength of the relationship.
source_idYesSource node ID.
target_idYesTarget node ID.
relationshipYesRelationship between the two nodes.

TDQS

A3.9/5.0
Behavior3/5

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

Description hints at behavioral effects (preserves structure, updates, conflicts) but lacks details on idempotency, destructiveness, or authorization needs. With no annotations provided, the description carries full burden; it is minimally adequate but not comprehensive.

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

Conciseness5/5

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

Two sentences, front-loaded with the action, no redundant information. Every sentence serves a purpose: stating what it does and when to use it.

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

Completeness3/5

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

For a tool with 4 parameters, no output schema, and moderate complexity, the description covers the core purpose and usage timing but does not explain return values, error handling, or behavior for duplicate edges. It is sufficient but not thorough.

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

Parameters3/5

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

Schema coverage is 100% with each parameter having a description. The tool description does not add new information about parameters beyond what the schema already provides, so a baseline score of 3 is appropriate.

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

Purpose5/5

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

Description clearly states verb 'Create' and resource 'relationship between two stored nodes', distinguishing it from sibling tools like store_node (creates nodes) and delete_node (removes nodes). The action is specific and unambiguous.

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

Usage Guidelines4/5

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

Explicitly advises using this tool 'immediately after storing related nodes' and explains the benefit ('preserves structure, updates, and conflicts'). However, it does not mention when not to use it or provide alternatives, leaving room for improvement.

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

store_nodeB

Store a piece of knowledge as a node in the persistent memory graph. Call this whenever you learn something important from the user: facts, preferences, decisions, entities, concepts, or questions. Prefer atomic facts.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNoOptional tags for categorization.
labelYesShort label for the knowledge being stored.
contentYesFull natural-language description for this node.
projectNoOptional project or workspace name used to partition memory.
agent_idNoOptional agent or client identifier used to partition memory.
node_typeYesCategory of knowledge represented by the node.
session_idNoOptional conversation or run identifier used to partition memory.
source_promptNoOptional original prompt that produced this knowledge.

TDQS

B3.4/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 mentions 'persistent' storage but does not disclose behavioral traits like idempotency, overwrite behavior, rate limits, or required permissions. For a write operation, these gaps are significant.

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

Conciseness5/5

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

Two sentences, front-loaded with purpose, then usage context. No fluff or redundancy. Every sentence earns its place.

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 tool with 8 parameters, no output schema, and no annotations, the description is too brief. It omits return value, error conditions, and behavioral guarantees. Given sibling tools like 'decompose_and_store' and 'update_node', more context on how this tool fits into the overall memory graph workflow is needed.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all parameters. The description adds no additional parameter-specific meaning beyond 'atomic facts' hint, which is insufficient to raise the score above baseline 3.

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

Purpose4/5

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

The description clearly states the purpose: 'Store a piece of knowledge as a node in the persistent memory graph.' It also specifies when to call it: 'whenever you learn something important... Prefer atomic facts.' However, it does not explicitly distinguish from sibling tools like 'store_edge' or 'decompose_and_store', leaving some ambiguity for the agent.

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

Usage Guidelines4/5

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

Provides explicit guidance on when to use (learned important facts, preferences, etc.) and suggests atomic facts. However, it lacks explicit when-not-to-use guidance or alternatives, given many sibling tools exist.

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

timelineA

Build a chronological view of memory changes for a node, a query result, or the whole tenant. Use when order and evidence matter. Returns timestamped timeline items.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of timeline items to return.
queryNoOptional natural-language query to select relevant memories.
node_idNoOptional node ID to anchor the timeline.
max_depthNoRelationship traversal depth when a node ID or query is supplied.
include_evidenceNoWhether to include evidence records alongside node and edge events.

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description must carry full behavioral disclosure. It states the return type (timestamped timeline items) but does not clarify side effects, authorization needs, or data mutability. The term 'Build' could imply mutation, but it likely refers to constructing a view, not modifying state.

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

Conciseness5/5

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

Two concise sentences front-loading the purpose and usage. Every word earns its place with no redundancy.

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

Completeness3/5

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

The description provides the core purpose but lacks details about return format, ordering, or interaction of parameters. With no output schema and no annotations, more context would benefit agent decision-making. However, parameter schemas are fully covered, providing some completeness.

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

Parameters3/5

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

Input schema has 100% description coverage for all 5 parameters. The description adds marginal value by linking parameters to use cases (node_id, query) but does not explain semantics beyond the schema. Baseline 3 is appropriate given full schema coverage.

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

Purpose5/5

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

Description clearly states the tool 'builds a chronological view of memory changes' and specifies the scope (node, query result, whole tenant). It differentiates from siblings by mentioning order and evidence, which aligns with the tool's name and purpose.

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

Usage Guidelines4/5

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

The description includes explicit guidance: 'Use when order and evidence matter.' This helps the agent decide when to invoke, though it lacks explicit alternatives or when-not-to-use scenarios.

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

update_nodeA

Update an existing memory node's content, label, or tags. Use when a stored memory needs correction without deleting its identity. Returns the updated node.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNoReplacement tag list for the node.
labelNoReplacement short label for the node.
contentNoReplacement natural-language content for the node.
node_idYesID of the node to update.

TDQS

A4/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 of behavioral disclosure. It mentions the return value ('Returns the updated node') and hints at identity preservation ('without deleting its identity'), but does not discuss permissions, side effects, or error cases (e.g., node not found). More detail would be beneficial.

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 three sentences: purpose, usage guidance, return value. It is front-loaded with the verb and resource, and every sentence adds value without redundancy.

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

Completeness4/5

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

For a tool with 4 parameters, no output schema, and no annotations, the description adequately covers the action, when to use it, and what is returned. It lacks details on partial vs full replacement and error handling, but overall is sufficient for common use cases.

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 baseline is 3. The description reiterates the fields (content, label, tags) but adds no new semantic meaning beyond what the schema already provides for each parameter. The description does not clarify behavior for partial updates.

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

Purpose5/5

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

The description clearly states the verb 'update' and the resource 'existing memory node', and specifies the updatable fields: content, label, or tags. It distinguishes this tool from siblings like create (store_node) or delete (delete_node).

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

Usage Guidelines4/5

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

The description explicitly says 'Use when a stored memory needs correction without deleting its identity', providing clear when-to-use context. However, it does not mention alternative sibling tools for comparison, which would help an agent decide more precisely.

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

window_graph_vizA

Export the context-window graph as an interactive HTML visualization. Each node is a chat/session window and edges show overlap, supersession, temporal order, or shared scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoOptional project/repository scope whose context-window graph should be exported.
output_pathNoOptional destination HTML file path. If omitted, Waggle chooses an export path.
include_physicsNoWhether the visualization should use physics-based node layout.

TDQS

A3.5/5.0
Behavior3/5

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

No annotations provided, so description carries the burden. It describes the output and graph structure but does not disclose side effects, permissions, or whether it is read-only. A 3 is adequate given the simplicity.

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

Conciseness5/5

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

Two sentences, no fluff. Front-loaded with the core action and format, followed by a clarifying sentence on node/edge meaning.

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?

No output schema, but parameters are well-documented. However, the description does not differentiate from sibling tools like export_graph_html, which could cause confusion. Adequate but not complete.

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

Parameters3/5

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

Input schema has 100% coverage, so baseline is 3. Description does not add any additional meaning beyond the parameter descriptions already present.

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

Purpose5/5

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

Clearly states the action ('Export') and the specific resource ('context-window graph') as interactive HTML visualization. Also explains node and edge semantics, distinguishing from sibling graph 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 guidance on when to use this tool vs siblings like export_graph_html or export_context_bundle. Does not mention prerequisites or when not to use.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 2 tool updatesv0.1.24
    • Changedbuild_context1 field changed
      • addedInput schema / properties / context_window_id
        Added value: +{
        +  "description": "Optional context window ID to focus retrieval within an existing window.",
        +  "type": "string"
        +}
    • Changedcommit10 fields changed
      • addedInput schema / properties / audience
        Added value: +{
        +  "default": "llm",
        +  "description": "Target audience for bundle formatting.",
        +  "enum": [
        +    "llm",
        +    "human"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / format
        Added value: +{
        +  "default": "both",
        +  "description": "Context bundle output format.",
        +  "enum": [
        +    "markdown",
        +    "json",
        +    "both"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / include_edges
        Added value: +{
        +  "default": true,
        +  "description": "Whether context bundles should include graph edges.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / include_source_prompt
        Added value: +{
        +  "default": false,
        +  "description": "Whether context bundles should include stored source prompts.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / include_timestamps
        Added value: +{
        +  "default": true,
        +  "description": "Whether context bundles should include timestamps.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / max_depth
        Added value: +{
        +  "default": 2,
        +  "description": "Relationship traversal depth for context bundle retrieval.",
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / max_nodes
        Added value: +{
        +  "default": 25,
        +  "description": "Maximum number of nodes to include in a context bundle.",
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / mode
        Added value: +{
        +  "default": "prime",
        +  "description": "Bundle mode: prime exports scoped memory, query exports query-focused context.",
        +  "enum": [
        +    "prime",
        +    "query"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / query
        Added value: +{
        +  "default": "",
        +  "description": "Optional query used when commit_format='bundle' and mode='query'.",
        +  "type": "string"
        +}
      • addedInput schema / properties / retrieval_mode
        Added value: +{
        +  "default": "hybrid",
        +  "description": "Retrieval strategy for query-mode context bundles.",
        +  "enum": [
        +    "graph",
        +    "verbatim",
        +    "hybrid"
        +  ],
        +  "type": "string"
        +}
  2. 22 tool updatesv0.1.17
    • Addedaggregate_graph
    • Addedbuild_context
    • Addedcanonicalize_node
    • Addedclear_all
    • Addedclear_project
    • Addedclear_session
    • Addedcommit
    • Changeddebug_retrieval1 field changed
      • addedInput schema / properties / retrieval_mode
        Added value: +{
        +  "default": "hybrid",
        +  "description": "Which retrieval stack to diagnose.",
        +  "enum": [
        +    "graph",
        +    "verbatim",
        +    "hybrid"
        +  ],
        +  "type": "string"
        +}
    • Addeddedup_candidates
    • Addeddiff
    • Addededge_quality_report
    • Removedexport_context_bundle
    • Removedexport_graph_backup
    • Addedfsck
    • Addedgrep
    • Removedimport_graph_backup
    • Addedload_abhi_chunks
    • Addedmerge
    • Addedpull
    • Changedquery_graph5 fields changed
      • addedInput schema / properties / as_of
        Added value: +{
        +  "description": "ISO-8601 datetime. When provided, return only nodes valid at that point in time (overrides include_invalidated).",
        +  "type": "string"
        +}
      • addedInput schema / properties / include_invalidated
        Added value: +{
        +  "default": false,
        +  "description": "When true, include nodes whose valid_to has passed. Default false excludes expired nodes.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / retrieval_mode / default
        Previous value: -"graph"New value: +"hybrid"
      • changedInput schema / properties / retrieval_mode / description
        Previous value: -"Retrieval strategy: graph-only, transcript replay, or fused graph plus replay results."New value: +"Retrieval strategy: graph-only, verbatim transcript retrieval, or hybrid fusion with reranking."
      • changedInput schema / properties / retrieval_mode / enum
        Previous value: -[
        -  "graph",
        -  "replay",
        -  "fusion"
        -]New value: +[
        +  "graph",
        +  "verbatim",
        +  "hybrid"
        +]
    • Changedresolve_conflict1 field changed
      • addedInput schema / properties / winner
        Added value: +{
        +  "description": "Optional node ID of the winning node. Must be source_id or target_id of the edge. When provided, the losing node's valid_to is set to now, superseding it.",
        +  "type": "string"
        +}
    • Addedshow
  3. 5 tool updatesv1.0.10
    • Addedclose_context_window
    • Addeddebug_retrieval
    • Addedget_context_window
    • Addedlist_context_windows
    • Addedwindow_graph_viz
  4. 23 tool updatesv1.0.8
    • First observeddecompose_and_store
    • First observeddelete_node
    • First observedexport_context_bundle
    • First observedexport_graph_backup
    • First observedexport_graph_html
    • First observedexport_markdown_vault
    • First observedget_node_history
    • First observedget_related
    • First observedget_stats
    • First observedget_topics
    • First observedgraph_diff
    • First observedimport_graph_backup
    • First observedimport_markdown_vault
    • First observedlist_conflicts
    • First observedlist_context_scopes
    • First observedobserve_conversation
    • First observedprime_context
    • First observedquery_graph
    • First observedresolve_conflict
    • First observedstore_edge
    • First observedstore_node
    • First observedtimeline
    • First observedupdate_node

TDQS

A3.5/5.0

Scored across 41 tools

Disambiguation3/5

Several tools have overlapping purposes: query_graph, aggregate_graph, get_related, build_context, and prime_context all retrieve memory context, differing mainly in scope and compression. Similarly, export_graph_html, window_graph_viz, and export_markdown_vault all export visualizations, and commit/pull/diff/merge/grep/show/fsck/load_abhi_chunks form a file-management cluster that may confuse agents. However, many tools are distinct (store_node, store_edge, delete_node, resolve_conflict).

Naming Consistency3/5

Most tools use verb_noun snake_case (store_node, delete_node, list_conflicts, resolve_conflict), but there are deviations: 'pull', 'diff', 'merge', 'grep', 'show', 'fsck' are bare git-like verbs, and 'timeline' is a noun. The mixed conventions are readable but not fully consistent.

Tool Count2/5

41 tools is excessive for a memory-graph MCP server. While the domain is broad (graph CRUD, context windows, file import/export, file format utilities), many tools could be consolidated (e.g., multiple export variants, multiple retrieval modes, multiple .abhi file inspection commands). The count feels heavy and will overwhelm agents.

Completeness4/5

The tool surface covers the full memory lifecycle: create/read/update/delete nodes and edges, conflict detection/resolution, context window management, import/export, backup/restore, and diagnostics. Minor gaps exist (e.g., no explicit edge update tool, no batch delete except clear_*), but the domain is thoroughly covered.

Maintenance

ActivityActive
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers