Waggle-mcp
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 utf8or setPYTHONUTF8=1to avoidUnicodeEncodeErrorfrom emoji in log output.
Install Waggle
Waggle is a local MCP server that gives coding agents persistent graph memory.
Recommended:
VS Code: install the live
Waggle: Local Memory for AI Agentsextension from the Marketplace for one-click setupMCP clients: use docs/install and Smithery metadata in
smithery.yamlClaude: use docs/install/claude-code.md or docs/install/claude-desktop.md
Developers:
pipx install waggle-mcp
Benchmark:
LongMemEval 500-case retrieval-only:
97.4% R@5,89.0% Exact@5forgraph_rawretrieval (artifact)
VS Code extension features:
one-click
Enable for this Workspaceonboardinginstalls
waggle-mcpwith consent if it is missingsafely creates or updates
.vscode/mcp.jsonpreserves existing non-Waggle MCP servers
runs
waggle-mcp doctoropens Graph Studio
exports Waggle memory from the editor
Claude distribution:
Claude Code does not use an
.mcpbbundle. Users add Waggle directly as an MCP server:
pipx install waggle-mcp
claude mcp add --transport stdio waggle -- waggle-mcp serve --transport stdioClaude Desktop uses the
claude-desktop-extension.mcpbbundle, 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 demoThis 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
.abhiexport, import, diff, merge, and checkpoint handoffGraph 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 fallbackRecursive 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:
Decompose — the query is split into targeted subqueries (decisions, constraints, implementation details, unfinished work, conflicts)
Retrieve — each subquery runs against graph, hybrid, and verbatim transcript retrieval
Expand — the graph is traversed around top nodes via typed edges (
updates,contradicts,depends_on,derived_from)Resolve — update chains and contradictions are detected; superseded nodes are flagged
Deduplicate & rank — overlapping hits are merged; high-signal node types (decisions, preferences) are boosted
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 |
|
| Enable/disable the feature |
|
| Default token budget |
|
| Max decomposed subqueries |
|
| Graph expansion depth |
|
| 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 rationaleSession 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 edgeSession 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 explicitSetting 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.jsonWindows:
%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 serveClaude 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 serveAfter restarting, run /mcp to confirm Waggle is connected.
Cursor
Cursor Settings → Features → MCP Servers → + Add
Command:
waggle-mcpArgs:
serveEnv 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 serveDo not expose Waggle publicly without authentication.
waggle-mcp not on PATH?
pipx ensurepath # then restart your terminalAutomatic 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 |
|
| Tries scoped DB recall first; if the scope is cold and a session checkpoint exists, imports the |
|
| Applies Waggle's durable-ingest policy and only calls |
|
| Calls |
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-hooksVerify 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 |
| After any turn containing a decision, preference, constraint, correction, or project fact. Persists the verbatim turn first, then extracts graph nodes. Returns |
| Before answering questions that may depend on prior context. Hybrid retrieval (graph + verbatim transcript) by default. Supports |
| At the start of a new session to hydrate context from the most relevant scoped memories. |
| When the user asks what changed recently. |
| When the agent needs to store a single atomic fact or explicitly link two nodes. Prefer |
observe_conversationanddecompose_and_storecreate edges automatically. If you only callstore_node, you get isolated facts with no traversal value.
Extended retrieval — agent-callable, situational
Tool | Description |
| Broad filtered subgraph for map-reduce tasks. Use when you want a large scoped slice rather than high-precision top-K. Supports |
| Fetch the neighborhood around a specific node by ID. |
| Inspect a node's evidence, validity window, and connected context. |
| Topic clusters via community detection across the full tenant graph. |
| Chronological view of memory changes for a node or query. |
| List unresolved contradiction and update edges. |
| Mark a conflict resolved. Pass |
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 an existing node's content, label, or tags. |
| Delete a node and all its edges. |
| Break long content into atomic nodes and infer edges automatically. |
| Return near-duplicate node pairs above a similarity threshold for human review. |
| Merge multiple nodes into one canonical node. Repoints all edges, collects aliases. Idempotent. |
| Audit edge quality — counts, average confidence per type, top/bottom confidence edges. |
| Diagnose retrieval ranking for a query — embedding scores, window routing, tiered vs flat comparison. |
Context windows
Tool | Description |
| Known agent, project, and session scope values. |
| Chat/session-level memory containers with status and node counts. |
| Inspect one context window and its nodes. |
| Close a session window and derive cross-window edges. |
| Export the context-window graph as an interactive HTML visualization. |
| Export the memory graph as an interactive HTML visualization. |
| 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 |
|
| Snapshot the graph to a |
|
| Load a |
|
| Compare two |
|
| Three-way merge two |
|
| Validate a |
|
| Inspect a |
|
| Execute a saved or ad hoc query against a |
| — | Load only selected or query-relevant chunks from a |
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 the graph as an Obsidian-compatible 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..." |
|
"What do you know about X?" |
|
"What changed recently?" |
|
"Summarize context for a new session" |
|
"Show all stored topics" |
|
"Export my memory to a file" |
|
"Are there any duplicate nodes?" |
|
"What's the quality of my graph edges?" |
|
Edges are what make graph memory work.
observe_conversationanddecompose_and_storecreate edges automatically. If you only callstore_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.abhiResume order is:
same machine / shared
WAGGLE_DB_PATH: use the live SQLite memory firstif that scoped DB recall is empty: import the session
.abhicheckpointdifferent 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.jsonCLI Command Reference
Command | Description |
| Show all commands and options. |
| Best first command — tool map, workflows, and setup hints. |
| Run this if something isn't working — checks config, model cache, DB path. |
| Re-embed stale rows after a |
| Non-interactive one-line setup for all detected clients. |
| Interactive setup wizard for one client. |
| Run the MCP server (usually started by your client). |
| Run the 60-second local demo with a pre-loaded example graph. |
| Launch Graph Studio in the browser. |
| Remove the waggle-managed hooks block from Claude Code settings. |
| Export a portable Markdown/JSON context pack. |
| Export the graph as an Obsidian-style vault. |
| Ingest a rollover transcript, export a handoff bundle, and emit a session |
WAGGLE_STARTUP_MODE
Value | Behaviour | Best for |
| Model loads in background; server responds immediately | Daily use |
| ML never loads; semantic tools return | Schema inspection, tool listing |
| Server blocks until model is fully loaded | Production deployments |
Graph Studio
waggle-mcp edit-graphA 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
.abhipreview, 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-v2Any locally available
sentence-transformersmodel name works.If the model is unavailable, Waggle falls back to deterministic SHA-256 embeddings.
WAGGLE_MODEL=all-mpnet-base-v2 waggle-mcp serveFor 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
.abhiexport, Waggle scans transcript text for likely secrets (API keys, JWTs, passwords). Export is refused if secrets are found unless you pass--force.waggle-mcp pushdefaults to AES-256-GCM encrypted export.
Known Limitations
Edges are load-bearing.
observe_conversationanddecompose_and_storecreate them automatically. Rawstore_nodecalls 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 |
|
|
|
| Embedding model downloading (~420 MB) | Set |
| Windows stdout not UTF-8 |
|
| Old pre-v0.2 field names | Use |
Waggle registered but agent doesn't see it (Antigravity) | Wrong config file | Agent reads |
| Wrong Python environment | Use |
| Python/OS wheel mismatch | Use Python 3.11+; upgrade: |
Reference & Docs
Environment variables, full tool surface, admin commands, Docker setup:
waggle-mcp --helpordocs/reference.mdProduction deployment:
deploy/kubernetes/README.mdOperations and troubleshooting:
docs/runbooks/Automatic memory rules (copy-pasteable):
docs/automatic-memory-rules.mdHook 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 toolsaggregate_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.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Optional list of tags to require. | |
| as_of | No | ISO-8601 datetime. When provided, return only nodes valid at that point in time (overrides include_invalidated). | |
| query | No | Optional natural-language search query to rank the broad retrieval. | |
| project | No | Optional project or workspace name used to partition memory. | |
| agent_id | No | Optional agent or client identifier used to partition memory. | |
| max_depth | No | Relationship traversal depth around matching nodes. | |
| max_nodes | No | Maximum number of nodes to return (default 100, up to 1000). | |
| node_types | No | Optional list of node types to filter by (e.g., 'fact', 'entity'). | |
| session_id | No | Optional conversation or run identifier used to partition memory. | |
| include_invalidated | No | When true, include nodes whose valid_to has passed. Default false excludes expired nodes. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Retrieval depth mode: 'fast' runs fewer subqueries for low latency; 'balanced' is the default; 'deep' adds extra subqueries for thorough coverage. | balanced |
| depth | No | Graph expansion depth around retrieved nodes. | |
| query | Yes | Current user task or question to build context for. | |
| project | No | Optional project or workspace name used to partition memory. | |
| agent_id | No | Optional agent or client identifier used to partition memory. | |
| session_id | No | Optional conversation or run identifier used to partition memory. | |
| token_budget | No | Maximum token budget for the context pack (approximate). | |
| max_subqueries | No | Maximum number of decomposed subqueries to run. | |
| include_evidence | No | Whether to include verbatim transcript evidence in the context pack. | |
| context_window_id | No | Optional context window ID to focus retrieval within an existing window. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Optional project or workspace name used to partition memory. | |
| agent_id | No | Optional agent or client identifier used to partition memory. | |
| node_ids | Yes | List of node IDs to merge into the canonical node. | |
| session_id | No | Optional conversation or run identifier used to partition memory. | |
| canonical_id | Yes | The canonical node ID to merge into. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | Must be true to perform the destructive clear operation. | |
| dry_run | No | Preview the clear operation without deleting data. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | Must be true to perform the destructive clear operation. | |
| dry_run | No | Preview the clear operation without deleting data. | |
| project | Yes | Project/repository scope to clear. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | Must be true to perform the destructive clear operation. | |
| dry_run | No | Preview the clear operation without deleting data. | |
| session_id | Yes | Session identifier to clear. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| window_id | Yes | ID of the context window to close. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Bundle mode: prime exports scoped memory, query exports query-focused context. | prime |
| force | No | Override the secret-scan refusal if transcript records contain likely secrets. Use only after deliberate review. | |
| query | No | Optional query used when commit_format='bundle' and mode='query'. | |
| format | No | Context bundle output format. | both |
| project | No | Optional project or workspace name used to partition memory. | |
| agent_id | No | Optional agent or client identifier used to partition memory. | |
| audience | No | Target audience for bundle formatting. | llm |
| max_depth | No | Relationship traversal depth for context bundle retrieval. | |
| max_nodes | No | Maximum number of nodes to include in a context bundle. | |
| session_id | No | Optional conversation or run identifier used to partition memory. | |
| output_path | No | Optional destination file path. If omitted, Waggle chooses an export path. | |
| commit_format | No | 'abhi' (default) exports a validated .abhi memory file; 'backup' exports a raw JSON backup; 'bundle' exports a portable Markdown/JSON context bundle. | abhi |
| include_edges | No | Whether context bundles should include graph edges. | |
| retrieval_mode | No | Retrieval strategy for query-mode context bundles. | hybrid |
| include_timestamps | No | Whether context bundles should include timestamps. | |
| include_source_prompt | No | Whether context bundles should include stored source prompts. | |
| include_low_confidence_edges | No | When true, include RELATES_TO edges with edge_confidence < 0.7 that are normally filtered from exports. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Natural-language search query to diagnose. | |
| project | No | Optional project or workspace name used to partition memory. | |
| agent_id | No | Optional agent or client identifier used to partition memory. | |
| max_depth | No | Relationship traversal depth for the flat retrieval comparison. | |
| max_nodes | No | Maximum number of flat and tiered node matches to include. | |
| session_id | No | Optional conversation or run identifier used to partition memory. | |
| retrieval_mode | No | Which retrieval stack to diagnose. | hybrid |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | Long-form content to decompose into memory nodes. | |
| context | No | Optional background that helps classify and connect extracted memories. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Optional project scope to filter candidates. | |
| agent_id | No | Optional agent scope to filter candidates. | |
| threshold | No | Minimum cosine similarity to report (default 0.85). | |
| session_id | No | Optional session scope to filter candidates. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| node_id | Yes | ID of the node to delete. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| input_path_a | Yes | Path to the first .abhi file (base / ours). | |
| input_path_b | Yes | Path to the second .abhi file (theirs / feature branch). |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Optional project or workspace name used to partition memory. | |
| agent_id | No | Optional agent or client identifier used to partition memory. | |
| session_id | No | Optional conversation or run identifier used to partition memory. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| output_path | No | Optional destination HTML file path. If omitted, Waggle chooses an export path. | |
| include_physics | No | Whether the visualization should use physics-based node layout. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Optional project or workspace name used to partition memory. | |
| agent_id | No | Optional agent or client identifier used to partition memory. | |
| root_path | Yes | Destination directory for the Markdown vault. | |
| session_id | No | Optional conversation or run identifier used to partition memory. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| input_path | Yes | Path to the .abhi file to validate. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| window_id | Yes | ID of the context window to inspect. | |
| include_nodes | No | Whether to include memory nodes stored in this context window. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| node_id | Yes | ID of the node to inspect. | |
| max_depth | No | Relationship traversal depth for related context. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Optional project or workspace name used to partition memory. | |
| agent_id | No | Optional agent or client identifier used to partition memory. | |
| session_id | No | Optional conversation or run identifier used to partition memory. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| since | No | Lookback window such as '24h', '7d', or an ISO-like timestamp. | 24h |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| query_id | No | Optional saved query id from the file. | |
| input_path | Yes | Path to the .abhi file to query. | |
| query_text | No | Optional ad hoc query text to execute. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| root_path | Yes | Source directory of the Markdown vault to import. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of conflicts to return. | |
| include_resolved | No | Whether to include conflicts that were already marked resolved. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of context windows to return. | |
| status | No | Optional status filter for returned windows. | |
| project | No | Optional project/repository scope to filter windows. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| query_id | No | Optional saved query id used to select chunks. | |
| chunk_ids | No | Optional explicit chunk ids to load. | |
| input_path | Yes | Path to the .abhi file to inspect. | |
| query_text | No | Optional ad hoc query text used to select chunks. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| output_path | Yes | Destination path for the merged .abhi file. | |
| merge_strategy | No | Winner strategy when both sides changed the same object differently. | prefer_right |
| base_input_path | Yes | Path to the common base .abhi file. | |
| left_input_path | Yes | Path to the left branch .abhi file (ours). | |
| right_input_path | Yes | Path to the right branch .abhi file (theirs). |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Optional project or workspace name used to partition memory. | |
| agent_id | No | Optional agent or client identifier used to partition memory. | |
| session_id | No | Optional conversation or run identifier used to partition memory. | |
| user_message | Yes | The user's message from the completed turn. | |
| assistant_response | Yes | The assistant's response from the completed turn. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Optional project or workspace name used to partition memory. | |
| agent_id | No | Optional agent or client identifier used to partition memory. | |
| session_id | No | Optional conversation or run identifier used to partition memory. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| input_path | Yes | Path to the .abhi or JSON backup file to import. | |
| pull_format | No | 'abhi' (default) imports a .abhi memory file; 'backup' imports a raw JSON backup. | abhi |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| as_of | No | ISO-8601 datetime. When provided, return only nodes valid at that point in time (overrides include_invalidated). | |
| query | Yes | Natural-language search query. | |
| project | No | Optional project or workspace name used to partition memory. | |
| agent_id | No | Optional agent or client identifier used to partition memory. | |
| max_depth | No | Relationship traversal depth around matching nodes. | |
| max_nodes | No | Maximum number of matching nodes to return. | |
| session_id | No | Optional conversation or run identifier used to partition memory. | |
| expand_depth | No | Optional support expansion depth. At 1, graph mode may return up to twice max_nodes. | |
| retrieval_mode | No | Retrieval strategy: graph-only, verbatim transcript retrieval, or hybrid fusion with reranking. | hybrid |
| include_invalidated | No | When true, include nodes whose valid_to has passed. Default false excludes expired nodes. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| winner | No | 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. | |
| edge_id | Yes | ID of the conflict edge to mark resolved. | |
| resolution_note | No | Optional human-readable note explaining the resolution. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| input_path | Yes | Path to the .abhi file to inspect. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| weight | No | Optional strength of the relationship. | |
| source_id | Yes | Source node ID. | |
| target_id | Yes | Target node ID. | |
| relationship | Yes | Relationship between the two nodes. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Optional tags for categorization. | |
| label | Yes | Short label for the knowledge being stored. | |
| content | Yes | Full natural-language description for this node. | |
| project | No | Optional project or workspace name used to partition memory. | |
| agent_id | No | Optional agent or client identifier used to partition memory. | |
| node_type | Yes | Category of knowledge represented by the node. | |
| session_id | No | Optional conversation or run identifier used to partition memory. | |
| source_prompt | No | Optional original prompt that produced this knowledge. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of timeline items to return. | |
| query | No | Optional natural-language query to select relevant memories. | |
| node_id | No | Optional node ID to anchor the timeline. | |
| max_depth | No | Relationship traversal depth when a node ID or query is supplied. | |
| include_evidence | No | Whether to include evidence records alongside node and edge events. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Replacement tag list for the node. | |
| label | No | Replacement short label for the node. | |
| content | No | Replacement natural-language content for the node. | |
| node_id | Yes | ID of the node to update. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Optional project/repository scope whose context-window graph should be exported. | |
| output_path | No | Optional destination HTML file path. If omitted, Waggle chooses an export path. | |
| include_physics | No | Whether the visualization should use physics-based node layout. |
TDQS
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.
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.
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.
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.
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.
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.
2 tool updates
v0.1.24- Changed
build_context1 field changed- added
Input schema / properties / context_window_idAdded value: +{ + "description": "Optional context window ID to focus retrieval within an existing window.", + "type": "string" +}
- Changed
commit10 fields changed- added
Input schema / properties / audienceAdded value: +{ + "default": "llm", + "description": "Target audience for bundle formatting.", + "enum": [ + "llm", + "human" + ], + "type": "string" +} - added
Input schema / properties / formatAdded value: +{ + "default": "both", + "description": "Context bundle output format.", + "enum": [ + "markdown", + "json", + "both" + ], + "type": "string" +} - added
Input schema / properties / include_edgesAdded value: +{ + "default": true, + "description": "Whether context bundles should include graph edges.", + "type": "boolean" +} - added
Input schema / properties / include_source_promptAdded value: +{ + "default": false, + "description": "Whether context bundles should include stored source prompts.", + "type": "boolean" +} - added
Input schema / properties / include_timestampsAdded value: +{ + "default": true, + "description": "Whether context bundles should include timestamps.", + "type": "boolean" +} - added
Input schema / properties / max_depthAdded value: +{ + "default": 2, + "description": "Relationship traversal depth for context bundle retrieval.", + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / max_nodesAdded value: +{ + "default": 25, + "description": "Maximum number of nodes to include in a context bundle.", + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / modeAdded value: +{ + "default": "prime", + "description": "Bundle mode: prime exports scoped memory, query exports query-focused context.", + "enum": [ + "prime", + "query" + ], + "type": "string" +} - added
Input schema / properties / queryAdded value: +{ + "default": "", + "description": "Optional query used when commit_format='bundle' and mode='query'.", + "type": "string" +} - added
Input schema / properties / retrieval_modeAdded value: +{ + "default": "hybrid", + "description": "Retrieval strategy for query-mode context bundles.", + "enum": [ + "graph", + "verbatim", + "hybrid" + ], + "type": "string" +}
22 tool updates
v0.1.17- Added
aggregate_graph - Added
build_context - Added
canonicalize_node - Added
clear_all - Added
clear_project - Added
clear_session - Added
commit - Changed
debug_retrieval1 field changed- added
Input schema / properties / retrieval_modeAdded value: +{ + "default": "hybrid", + "description": "Which retrieval stack to diagnose.", + "enum": [ + "graph", + "verbatim", + "hybrid" + ], + "type": "string" +}
- Added
dedup_candidates - Added
diff - Added
edge_quality_report - Removed
export_context_bundle - Removed
export_graph_backup - Added
fsck - Added
grep - Removed
import_graph_backup - Added
load_abhi_chunks - Added
merge - Added
pull - Changed
query_graph5 fields changed- added
Input schema / properties / as_ofAdded value: +{ + "description": "ISO-8601 datetime. When provided, return only nodes valid at that point in time (overrides include_invalidated).", + "type": "string" +} - added
Input schema / properties / include_invalidatedAdded value: +{ + "default": false, + "description": "When true, include nodes whose valid_to has passed. Default false excludes expired nodes.", + "type": "boolean" +} - changed
Input schema / properties / retrieval_mode / defaultPrevious value: -"graph"New value: +"hybrid" - changed
Input schema / properties / retrieval_mode / descriptionPrevious 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." - changed
Input schema / properties / retrieval_mode / enumPrevious value: -[ - "graph", - "replay", - "fusion" -]New value: +[ + "graph", + "verbatim", + "hybrid" +]
- Changed
resolve_conflict1 field changed- added
Input schema / properties / winnerAdded 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" +}
- Added
show
5 tool updates
v1.0.10- Added
close_context_window - Added
debug_retrieval - Added
get_context_window - Added
list_context_windows - Added
window_graph_viz
23 tool updates
v1.0.8- First observed
decompose_and_store - First observed
delete_node - First observed
export_context_bundle - First observed
export_graph_backup - First observed
export_graph_html - First observed
export_markdown_vault - First observed
get_node_history - First observed
get_related - First observed
get_stats - First observed
get_topics - First observed
graph_diff - First observed
import_graph_backup - First observed
import_markdown_vault - First observed
list_conflicts - First observed
list_context_scopes - First observed
observe_conversation - First observed
prime_context - First observed
query_graph - First observed
resolve_conflict - First observed
store_edge - First observed
store_node - First observed
timeline - First observed
update_node
TDQS
Scored across 41 tools
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).
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.
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.
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
Related MCP Connectors
Persistent, portable memory for AI assistants — your private memory graph, from any MCP client.
Your memory, everywhere AI goes. Build knowledge once, access it via MCP anywhere.
One memory, every AI: Claude, ChatGPT, Perplexity, Gemini, Cursor, OpenClaw, Hermes, any MCP client.
Shared long-term memory for AI agents: save and recall context as a searchable knowledge graph.
Related MCP Servers
AlicenseNot gradedqualityDmaintenanceA universal memory server that allows users to access their chat memories across different LLMs without requiring logins or payment.1,715MIT- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to build and query temporally-aware knowledge graphs from conversations and data. Supports adding episodes, searching entities and facts, and maintaining persistent memory across interactions.10Apache 2.0
- AlicenseAqualityAmaintenanceCognitive memory for AI agents. Works with Claude Code, Cursor, Windsurf, and any MCP-compatible client.2024MIT
- AlicenseNot gradedqualityBmaintenanceOpen-source MCP server that gives any LLM long-term memory using a knowledge graph and vector search hybrid. It stores entities, observations, and relationships, enabling semantic recall across sessions with automatic clustering and fail-loud infrastructure.50MIT