Skip to main content
Glama

Give your coding agent repo memory.

Sverklo gives coding agents repo memory: symbols, callers, diffs, blast radius, and git-pinned decisions before they edit. It is an open-source local-first MCP server for Claude Code, Cursor, Windsurf, Codex CLI, and any MCP-speaking coding agent.

Local-first ◦ MIT ◦ bundled local embeddings by default ◦ remote embeddings only when explicitly configured ◦ telemetry opt-in and off by default

Use Sverklo when your agent needs relationships before editing: callers, dependencies, tests, diff risk, or prior repo decisions.

Use grep/ripgrep when you know the exact string, the repo is tiny, or the change is one file.

Start with the no-write proof command before installing MCP config. The public bench covers 180 hand-verified tasks across 6 OSS codebases; the methodology and ground truth live in sverklo/sverklo-bench. Bench · paper · 90-second demo

cd your-project
npm exec --yes --package=sverklo@latest -- sverklo prove --no-write --guided --markdown
sverklo init --dry-run
npm install -g sverklo && sverklo init

sverklo prove --no-write --guided --markdown shows central files, a real symbol with callers, why that proof was selected, the exact prompt to paste into your agent, and a small feedback template before any MCP config or instruction files are written. It may cache the local model/index under ~/.sverklo, but it does not mutate your project. sverklo init --dry-run then previews the files init would touch; sverklo init writes the MCP config for your agent, appends local instructions to AGENTS.md or CLAUDE.md, and runs sverklo doctor to verify the handshake. With the bundled provider, code indexing and embeddings stay on your machine. An explicitly configured remote embedding provider receives the code chunks it embeds.

Need something shareable? Run sverklo prove --no-write --guided --markdown to print a GitHub/Discord-ready proof receipt from your repo, then post it in the proof thread.

Latest no-write proof run: on calesthio/OpenMontage@9066dcb (1,284 indexed files), Sverklo selected ToolResult at tools/base_tool.py:120 and found 475 references across 81 files. The legacy token-efficiency demo on the same checkout used 21.9× fewer estimated input tokens than grep+reading the top 10 matched files, with one miss called out plainly. Read the receipt · OpenMontage discussion

Need local launch planning for the Sverklo account? sverklo marketing runs a local-first Twitter/X agent-team workflow from operator-provided snapshots. It ranks opportunities, drafts seed-content queues, checks profile health, and records human decisions without posting, scraping, replying, liking, reposting, following, or changing the profile.

"The map is not the territory." — Alfred Korzybski

Training data is the map. Your codebase is the territory. Sverklo gives the agent the territory.

Editor shortcuts

Install in Claude Code Install in Cursor Install in VS Code Install in VS Code Insiders Install in Windsurf

npm version npm downloads License: MIT Audited repos DOI GitHub stars

If sverklo prove surfaces useful repo context, please post a receipt, correction, grep-better case, or setup-friction report in the proof thread. If it helped, starring the repo also helps other agent-heavy teams find it.

Sverklo bench:primitives token comparison

Watch the 90-second demo: terminal + Claude Code MCP integration

Watch the 90-second demo on YouTubesverklo initaudit → 37 MCP tools → live Claude Code integration with blast-radius and symbol-graph traversal.

Sverklo demo — audit and badge

Why

Your AI agent edits UserService.validate(). It doesn't know 47 other functions call it. It hallucinates getUserByEmail() because that's how its training data spelled it — your code uses findByEmail(). It forgets the design decision you made yesterday because context was compacted. Tests pass because they mock the dependency. Breaking changes ship.

Sverklo drills into your repo before the agent does — symbol graph, blast radius, semantic recall, and git-pinned memory — so the agent reasons about your code instead of pattern-matching from training data.

cd your-project
npm exec --yes --package=sverklo@latest -- sverklo prove --no-write --guided
sverklo init --dry-run
npm install -g sverklo && sverklo init

That's it. sverklo prove --no-write --guided gives you the first useful repo-memory proof from your own codebase before project config changes; sverklo init --dry-run previews every setup target; sverklo init auto-detects your installed AI coding agent (Claude Code, Cursor, Windsurf, Zed), writes the right MCP config, appends instructions to AGENTS.md if present (otherwise CLAUDE.md), and runs sverklo doctor to verify the setup. sverklo prove --markdown makes that proof shareable in the public proof thread. Works on macOS, Linux, and Windows. Bundled local embeddings by default. Remote embeddings only when explicitly configured. Telemetry opt-in and off by default.

The bundled embedding model (all-MiniLM-L6-v2 ONNX, ~86 MB) is downloaded from HuggingFace on first use into ~/.sverklo/models/. After that download, the bundled embedding provider can run from the cached local model. An explicitly configured remote provider uses its remote endpoint instead.

Want proof before installing? Browse the /report leaderboard — Sverklo audits of 47 popular OSS repos (express, react-hook-form, vite, lodash, prisma, …) with grade cards for dead code, circular deps, coupling, and security.


Related MCP server: uacos

"But isn't this just…?"

Likely you've seen tools that look adjacent. The honest one-paragraph answers, with detailed comparisons linked.

…just grep with extra steps? No, but tuned grep is genuinely competitive when you know the exact string. On the 180-task bench, sverklo leads overall F1 (0.58 vs smart-grep's 0.34) while using about 35× fewer input tokens than naive grep and one tool call per task. For an AI agent inside a 200K context window, that's the load-bearing axis. For a human at a terminal, grep is still fine.

…just Sourcegraph Cody? Same retrieval surface (hybrid BM25 + vector + graph), different deployment model and license. Cody is source-available with enterprise per-developer pricing ($9-19/dev/mo); sverklo is MIT and runs on a laptop with no signup. Full comparison →

…just Greptile? Greptile is a hosted PR-review bot ($30/dev/mo). Sverklo is local-first MCP. Same risk-scoring goal, opposite deployment model. If your code can't leave the machine for compliance reasons, Greptile isn't an option. Full comparison →

…just Cursor's @codebase? Cursor's indexing is cloud-based and editor-bound. Sverklo runs alongside Cursor as an MCP server, adding the symbol graph, blast-radius, and bi-temporal memory that Cursor's @codebase doesn't expose. Full comparison →

…just Claude Context (Zilliz)? Claude Context requires a Milvus database. Sverklo runs entirely on embedded SQLite — no extra services to manage. Full comparison →

…just Aider's repo-map? Aider's repo-map is a static signal in the system prompt — fine for small repos, doesn't scale past ~100 files. Sverklo is the queryable retrieval layer Aider can call via MCP for larger codebases. They're complementary, not competing. Full comparison →

…a niche memory MCP? Most memory MCPs are wrappers around an external vector DB. Sverklo's memory is bi-temporal (valid_from_sha, valid_until_sha, superseded_by) and pinned to git SHAs, so you can ask "what did this team believe about auth at commit abc123?" and get the answer that was true then. Full comparison vs codebase-memory-mcp →

…what about Aider, Continue, Codex CLI, Claude Code? Those are agents — they generate and apply edits. Sverklo is the retrieval layer the agent calls before writing code. Use both. sverklo init auto-detects which agents you have →

If something is missing here that you'd ask about, open an issue — I'll add it.


What's new in 0.20

  • Contradiction detection on the bi-temporal memory layer. memories mode:"conflicts" surfaces pairs of active memories that share a pin (file path or symbol name) and may contradict — e.g., "JWT in middleware" vs "JWT in route handler" both pinned to src/auth.ts. Restricted to decision/preference/pattern categories (procedural/context are additive, not contradicting). Same-SHA pairs are skipped. Sorted by shared-pin count and age. Conservative by design: surfaces candidates for the agent or human to review, not auto-resolution. The bi-temporal model already preserved both sides of the contradiction; this just makes them findable.

What's new in 0.19

  • C# (.cs) language support — community contribution by @NerdChieftain in #22. Tree-sitter (when grammar installed) plus a regex fallback parser. Indexes namespaces (block-scoped + C# 10+ file-scoped), classes, structs, records (plain / record class / record struct), interfaces, enums, methods, constructors, and using directives. Adds tree-sitter-c-sharp@0.23.5 WASM grammar to the install set. Sverklo now supports 12 languages.

What's new in 0.18

  • Vue.js (.vue) support. Single-file components are now first-class: the <script> block parses through the existing TS/JS pipeline (with line remapping back to the SFC), Composition API helpers (ref, computed, reactive, defineProps, …) are indexed as symbols, and PascalCase template tags emit relative imports so PageRank sees component graphs. Also fixes a preexisting TS bug where import type { X } from 'y' was missed.

  • AGENTS.md aware sverklo init. When AGENTS.md exists, the prefer-sverklo block is appended there instead of CLAUDE.md. sverklo doctor flags drift between the two files so multi-agent setups stay in sync.

  • Windows pathing fixed. sverklo init and sverklo doctor now work on Windows — absolute paths go through path.basename() and stored relativePath is normalized to forward slashes so every downstream consumer is cross-platform.

  • npm run bench:swe — third-party-reproducible cross-repo eval. Clones 5 OSS repos (express, nestjs, vite, prisma, fastapi), runs 65 grounded questions, prints aggregated recall. PRs that add questions are welcome.

  • Tree-sitter parser opt-in. sverklo grammars install (~3.5 MB across 6 languages) + SVERKLO_PARSER=tree-sitter routes the indexer through real ASTs for TypeScript/TSX/JavaScript/Python/Go/Rust. Silent regex fallback when grammars aren't installed. Plan to flip the default lives in docs/parser-parity.md.

  • Workspace shared memory. sverklo workspace memory <name> add/list/search plus remember scope:"workspace" from the agent — write a decision once, query it from every other repo in the workspace. recall blends workspace results under project ones with a [ws] badge.

  • sverklo memory export — markdown / Notion / JSON. Migrate your team's decision log to wherever it actually lives.

  • PR-bot inline review. sverklo review --format github-review-json + the action's new inline-comments: true default posts per-line review comments via pulls.createReview, alongside the existing sticky summary.

  • VS Code extension scaffold at extensions/vscode/ with a pre-built sverklo-vscode-0.1.0.vsix. Inline caller-count decorations on every function header (⟵ 47 callers). Marketplace publish workflow ships dormant; install with code --install-extension extensions/vscode/sverklo-vscode-0.1.0.vsix today.

  • sverklo digest [--since 7d] — 5-line summary of audit-grade trend, new vs stale memories, and high-PageRank files touched. Wire into a shell-hook on cd for a daily sverklo check-in.


Grep vs Sverklo — the same question, side by side

Every one of these is a query a real engineer asked a real AI assistant last week. Grep gives you lines. Sverklo gives you a ranked answer.

The question

With Grep

With Sverklo

"Where is auth handled in this repo?"

grep -r 'auth' . -- 847 matches across tests, comments, unrelated vars, and one 2021 TODO

search "authentication flow" -- top 5 files ranked by PageRank: middleware, JWT verifier, session store, login route, logout route

"Can I safely rename BillingAccount.charge?"

grep '\.charge(' -- 312 matches polluted by recharge, discharge, Battery.charge fixtures

impact BillingAccount.charge -- 14 real callers, depth-ranked, with file paths and line numbers

"Is this helper actually used anywhere?"

grep -r 'parseFoo' . -- 4 matches in 3 files. Are any real, or just string mentions? Read each one.

refs parseFoo -- 0 real callers. Zero. Walk the symbol graph, not the text. Delete the function.

"What's load-bearing in this codebase?"

find . -name '*.ts' | xargs wc -l | sort -- the biggest files. Not the most important ones.

overview -- PageRank over the dep graph. The files the rest of the repo depends on, not the ones someone wrote too much code in.

"Review this 40-file PR — what should I read first?"

Read them in the order git diff printed them

review_diff -- risk-scored per file (touched-symbol importance x coverage x churn), prioritized order, flagged production files with no test changes

If the answer to your question is "exact string X exists somewhere," grep wins. Use grep. If the answer is "which 5 files actually matter here, ranked by the graph," you need sverklo.


Works with every MCP editor

Editor

MCP

Skills

Hooks

Auto-setup

Claude Code

yes

yes

yes

sverklo init

Cursor

yes

sverklo init

Windsurf

yes

sverklo init

Zed

yes

sverklo init

VS Code

yes

manual

JetBrains

yes

manual

Antigravity

yes

sverklo init

Codex CLI

yes

sverklo init

GitHub Copilot CLI

yes

sverklo init

Any MCP client

yes

npx sverklo /path


Hero tools

Tool

What it does

search

Hybrid BM25 + vector + PageRank search. Find code without knowing the literal string.

refs

All references to a symbol, with caller context. Flags likely dead-code candidates from the current reference graph.

impact

Walk the symbol graph, return ranked transitive callers — the real blast radius.

review_diff

Risk-scored review of git diff: touched-symbol importance x coverage x churn.

See all 37 tools below.

Pre-commit gate — block architectural regressions before they ship

sverklo audit-diff is a local-first incremental quality gate. It reads git diff, runs Tarjan SCC over the modified files' boundary subgraph, and exits non-zero if your diff introduces a new circular dependency or pushes a file's fan-in past the threshold. Designed to run as a .git/hooks/pre-commit step — typical run completes well under 200 ms.

# manual
sverklo audit-diff
echo $?   # 0 = clean, 1 = gate failure, 2 = config error

# CI variant
sverklo audit-diff --format json | jq .pass

Wire it as a pre-commit hook (plain git):

cat > .git/hooks/pre-commit <<'EOF'
#!/usr/bin/env bash
set -e
sverklo audit-diff
EOF
chmod +x .git/hooks/pre-commit

Husky variant:

npx husky add .husky/pre-commit "sverklo audit-diff"

Pre-existing cycles and fan-in spikes don't trip the gate — only violations introduced by your diff. To inspect legacy debt: sverklo audit-diff --show-existing (exit code is unchanged).

Search — find code without knowing the literal string

Tool

What

search

Hybrid BM25 + ONNX vector + PageRank, fused with Reciprocal Rank Fusion

search_iterative

Wider candidate pool with refinement hints between rounds

investigate

Parallel multi-channel fan-out (FTS / vector / path / symbol) with per-channel RRF

ask

Natural-language router — concepts + investigate + refs in one call

overview

Structural codebase map ranked by PageRank importance

lookup

Find any function, class, or type by name (typo-tolerant)

context

One-call onboarding — combines overview, code, and saved memories

ast_grep

Structural pattern matching across the AST, not just text

concepts

Browse the LLM-derived concept index (themes across the codebase)

clusters

Semantic clusters of related symbols, computed offline

patterns

Query symbols tagged with a design pattern (observer, repository, validator, ...)

Impact — refactor without the regression

Tool

What

impact

Walk the symbol graph, return ranked transitive callers (the real blast radius)

refs

Find all references to a symbol, with caller context

deps

File dependency graph — both directions, importers and imports

audit

Lint your codebase for AI-readiness. God nodes, hub files, dead code, circular deps, security smells, A-F health grade — all in one call

Review — diff-aware MR review with risk scoring

Tool

What

review_diff

Risk-scored review of git diff — touched-symbol importance x coverage x churn

critique

Second-pass critique of a review — what did the first read miss

test_map

Which tests cover which changed symbols; flag untested production changes

diff_search

Semantic search restricted to the changed surface of a diff

verify

Verify a quoted code span is still present at the cited SHA — citation gate

Memory — bi-temporal, git-aware, never stale

Tool

What

remember

Save decisions, patterns, invariants — pinned to the current git SHA

recall

Semantic search over saved memories with staleness detection

memories

List all memories with health metrics (still valid / stale / orphaned)

forget

Delete a memory

promote / demote

Move memories between tiers (core / archive)

pin / unpin

Pin a memory to a file path or symbol so recall surfaces it without semantic search

Post-filter primitives — refine the last response without re-querying

Tool

What

grep_results

Grep inside the previous result block instead of re-running the search

head_results

Take the first N hits from the previous response

ctx_peek

Peek at a referenced span by its handle without expanding it fully

ctx_slice

Slice a stored response by line range

ctx_grep

Grep within a stored context window

ctx_stats

Token-budget stats for stored response handles

Index health

Tool

What

status

Index health check, file counts, last update

wakeup

500-token codebase summary for system prompts on agents that can't run MCP


When to reach for sverklo — and when not to

We're honest about this. Sverklo isn't a magic 5x speedup and it doesn't replace grep. It's a sharper tool for specific jobs.

When sverklo earns its keep:

  • You don't know exactly what to search for

  • You need to prove dead code (zero references across the whole symbol graph)

  • You need the blast radius of a refactor before you start

  • You're reviewing a large PR and need to know what to read first

When grep is still the right tool:

  • Exact string matching — "does this literal string exist?"

  • Small codebases under ~50 source files — just read everything

  • Single-file diffs — git diff + Read is hard to beat

  • Build and test verification — only Bash runs npm test

If a launch post tells you a tool is great for everything, close the tab.


Common questions

How do I stop Claude Code from hallucinating about my codebase?

Claude generates code from training-data patterns, not your repo. Without a symbol graph, it invents getUserByEmail() when your code uses findByEmail(). Sverklo grounds the agent in your actual symbol graph — lookup and refs resolve names to file:line and prove existence before the agent writes the call. Verifiable retrieval (verify) lets the agent re-check that a quoted span is still present at the cited SHA, so a stale citation gets caught instead of confabulated.

Is there a local-first MCP server for codebase memory?

Yes — sverklo. remember and recall ship a bi-temporal memory layer: every memory is pinned to the git SHA it was authored on, and valid_until_sha + superseded_by preserve a timeline of supersessions instead of overwriting. Recall defaults to hybrid FTS5 + cosine over the bundled ONNX embedding model, with its index stored in embedded SQLite. No external vector database is required. An explicitly configured remote embedding provider receives the text it embeds.

Is there an open-source alternative to Sourcegraph Cody I can run locally?

Sverklo is the open-source local alternative to Sourcegraph Cody for codebase Q&A: hybrid BM25 + vector + PageRank retrieval, symbol-graph navigation, MIT-licensed instead of source-available, single-machine instead of Cody's enterprise deployment, and free instead of $9–19 per developer per month. Sverklo doesn't try to ship the same feature set — it's a primitives layer for AI coding agents (37 MCP tools), not a hosted IDE plug-in — but for the "give the agent semantic understanding of my codebase" job, it covers the same surface.

Where does my code go when I use sverklo?

By default, Sverklo indexes locally with embedded SQLite and the bundled ONNX embedding model. The model is downloaded from HuggingFace on first use (~86 MB), then cached in ~/.sverklo/models/. If you explicitly select a remote embedding provider, Sverklo sends that provider the code chunks it needs to embed; the index remains local. Telemetry is separate, opt-in, and off by default. Its fixed event schema excludes code, queries, file paths, symbol names, and memory contents.

Does sverklo work with Cursor's @codebase or Cursor Tab?

Sverklo runs alongside Cursor's built-in indexing rather than replacing it. Cursor's @codebase ships embedding-based search inside the IDE; sverklo adds the symbol graph, blast radius, diff-aware risk-scored review, and bi-temporal memory that Cursor doesn't expose. Wire sverklo as an MCP server in Cursor and both layers are available to the agent simultaneously. The same setup works for Claude Code, Windsurf, Zed, Antigravity, and anything else that speaks MCP.


Three retrieval techniques you'll only find here

Most code-search MCPs are a single BM25 + vector RRF on top of Milvus or pgvector. Sverklo's recall is built on three named moves that work because they exploit codebase structure, not just text similarity. Each one was added to close a real recall failure on real questions; together they're the reason sverklo's research benchmark hits 99% recall (31 of 32) without a managed vector database.

1. Filename-as-signal retrieval

When a query token matches a filename — even when the body of that file doesn't FTS-match — sverklo pulls every named definition in that file into the candidate set. Conversely, when FTS surfaces a file at all (because of a comment hit, an import line, anything), every definition in that file becomes a plausible answer. This is the single move that closes the "private helper function" gap: the function is too short for embeddings to disambiguate and uses a name no one would grep for, but it lives next to the code that does match. Implemented in src/search/investigate.ts (runDefinitionsByPathTokens, runDefinitionsInFtsFiles).

2. Channelized RRF fusion

Most hybrid retrievers run one Reciprocal Rank Fusion over fts ∪ vector and call it a day. Sverklo runs RRF per channel — FTS, vector, doc-section, path, symbol-name — then fuses the per-channel ranks with channel-specific weights. The path channel is weighted 1.5× because filename matches are precision-skewed; doc chunks score in their own channel so a 200-line markdown section can't drown a 4-line function body. This is structural retrieval, not just lexical-vs-semantic. Implemented in src/search/investigate.ts (per-channel RRF + weighted fusion).

3. Bi-temporal memory with superseded_by lineage

Every memory carries valid_from_sha and valid_until_sha. Updating a memory doesn't overwrite — it inserts a new row, sets valid_until_sha on the old one, and links them via superseded_by. Recall queries naturally exclude invalidated rows, but the timeline view keeps everything, so you can ask "what did this team believe about the auth flow at commit abc123?" and get the answer that was true then. sverklo prune consolidates clusters of similar episodic memories into one semantic note while preserving the lineage. Implemented across src/storage/memory-store.ts and src/memory/prune.ts.


How It Works

Your codebase                                              Agent query
     │                                                          │
     ▼                                                          ▼
┌─────────────┐                                          ┌─────────────┐
│   Parse     │  tree-sitter (12 langs) or               │  Tool call  │
│   chunks    │  regex fallback                          │  (1 of 37)  │
└──────┬──────┘                                          └──────┬──────┘
       │                                                         │
       ├─────────────┐         Index time                        │
       │             │                                           │
       ▼             ▼                                           │
  ┌────────┐    ┌─────────┐                                      │
  │ Embed  │    │ Import  │                                      │
  │ ONNX   │    │ graph   │                                      │
  │ MiniLM │    │ + PageRank                                     │
  └───┬────┘    └────┬────┘                                      │
      │              │                                           │
      ▼              ▼                                           │
  ┌──────────────────────────┐                                   │
  │ SQLite + sqlite-vec      │ ← single-file index, ~/.sverklo/  │
  │ chunks · embeddings ·    │                                   │
  │ symbols · refs · imports │                                   │
  │ memories (bi-temporal)   │                                   │
  └────────────┬─────────────┘                                   │
               │                                                 │
               │            Query time                           │
               ▼                                                 ▼
        ┌──────────────────────────────────────────────────────────┐
        │             Channelized RRF retrieval                    │
        │                                                          │
        │   FTS · Vector · Doc-section · Path · Symbol-name        │
        │      └─ each ranked independently ─┘                     │
        │                                                          │
        │   Fused with channel weights (path 1.5×, doc 0.7×, …)   │
        └─────────────────────────┬────────────────────────────────┘
                                  │
                                  ▼
                       ┌────────────────────────┐
                       │ Token-budgeted answer  │ ← the agent gets
                       │ file:line + chunk      │   ranked code, not
                       │ + provenance           │   a wall of text
                       └────────────────────────┘
  1. Parse your codebase into functions, classes, types (TS, JS, Vue, Python, Go, Rust, Java, C, C++, Ruby, PHP, C#)

  2. Embed code using all-MiniLM-L6-v2 ONNX (384d, bundled and local by default), a local Ollama model, or an explicitly selected remote provider that receives the code chunks it embeds

  3. Graph dependencies and compute PageRank (structurally important files rank higher)

  4. Retrieve via channelized RRF — per-channel rank fusion with channel-specific weights, the architectural choice that closes the private-helper-function recall gap

  5. Remember decisions across sessions, pinned to git SHAs (bi-temporal memory)

  6. Watch for file changes and re-index incrementally (~1 s per edit)


Performance

Real measurements on real codebases. Reproducible via npm run bench (methodology).

Repo

Files

Cold index

Search p95

Impact analysis

DB size

gin-gonic/gin

99

10 s

12 ms

0.75 ms

4 MB

nestjs/nest

1,709

22 s

14 ms

0.88 ms

11 MB

facebook/react

4,368

152 s

26 ms

1.18 ms

67 MB

  • Search p95 stays under 26 ms even on a 4k-file monorepo

  • Impact analysis is sub-millisecond — indexed SQL join, not a string scan

  • 24 languages: 10 first-class structural parsers plus 14 regex-fallback languages

Retrieval benchmark — bench:primitives

Hybrid retrieval F1 vs grep baselines on a 180-task hand-verified evaluation across six OSS codebases (express, lodash, sverklo, requests, flask, fastapi). Public report at sverklo.com/bench/ — including every slice where sverklo loses. Methodology repo: github.com/sverklo/sverklo-bench.

Latest published 180-task run (sverklo v0.20.21, May 2026):

baseline

F1

avg input tokens

tool calls

naive-grep

0.25

22,704

6.3

smart-grep (tuned)

0.34

714

3.2

jcodemunch-mcp

0.29

1,907

1.2

GitNexus

0.30

630

1.2

sverklo

0.58

652

1.0

Sverklo leads overall F1, dominates P4 file-dependency questions, and keeps the honest loss slice visible: dead-code detection is where grep-style baselines remain strongest. Token economy: about 35× fewer input tokens than naive grep, with a single tool call per task.

Reproduce: npm run bench:quick. Filter with BASELINES=sverklo,jcodemunch DATASETS=express npm run bench:quick.

Submitting a baseline? Open a PR adding benchmark/src/baselines/<your-tool>.ts — auto-bench CI runs on the PR (express dataset, ~10 min) and posts a results-table comment back. See .github/workflows/auto-bench.yml.


Quick Start

Three ways to install. Pick whichever matches your setup.

Install in Cursor Install in VS Code

Click the badge for your editor. Cursor / VS Code prompt to confirm, then sverklo's MCP config is written automatically. Restart the editor and the 37 tools appear in the tool list. No npm install requirednpx resolves it on first use.

cd your-project
npm exec --yes --package=sverklo@latest -- sverklo prove --no-write --guided
sverklo init --dry-run
npm install -g sverklo && sverklo init

Start with proof, then wire the agent. sverklo prove --no-write --guided prints central files, a real caller graph, why that symbol was selected, and a prompt to paste into your agent without writing MCP config or instruction files. sverklo init --dry-run previews setup targets. sverklo init auto-detects which AI coding agents you have (Claude Code, Cursor, Windsurf, Zed, Antigravity) and writes the right MCP config files. Add --markdown or --receipt for a shareable proof artifact, then post it in the proof thread. Idempotent — safe to re-run. If sverklo doesn't appear in your agent after restart, run sverklo doctor --agent claude or the matching agent name.

Per-agent config locations (sverklo init writes these for you):

  • Claude Code: .mcp.json at project root + appends to CLAUDE.md (or AGENTS.md if present)

  • Cursor: .cursor/mcp.json

  • Windsurf: ~/.windsurf/mcp.json

  • VS Code: .vscode/mcp.json

  • JetBrains: Settings → Tools → MCP Servers

  • Antigravity: ~/.gemini/antigravity/mcp_config.json (global; re-run sverklo init per project)

For agents we don't auto-detect, drop this in their MCP config:

{
  "mcpServers": {
    "sverklo": {
      "command": "/full/path/to/sverklo",
      "args": ["."]
    }
  }
}

Use the full binary path (which sverklo) — some clients spawn subprocesses without inheriting $PATH.

git clone https://github.com/sverklo/sverklo.git
cd sverklo
npm install
npm run build
npm link
sverklo init    # in your project directory

Use this if you're contributing, debugging the indexer, or want to run a not-yet-published build. The npm link step makes sverklo resolvable globally from the local checkout.

To run the bench:

npm run bench:quick

Output lands in benchmark/results/<timestamp>/.

Git worktrees

Yes, sverklo works with git worktree. Run sverklo init inside each worktree — that gives you per-worktree isolation:

  • Index lives at ~/.sverklo/<basename>-<hash>/index.db, keyed by absolute path. Two worktrees of the same repo → two independent databases.

  • Memory journal lives at <worktree>/.sverklo/memories.jsonl, inside the worktree itself. Bi-temporal SHA pinning means each memory still answers "what was true at commit X?" correctly across branch switches within one worktree.

  • .git linkfile: nothing special needed. Sverklo shells out to git with cwd: rootPath; git CLI handles the worktree linkfile transparently.

  • MCP config: keep args: ["."] from the worktree root (the default sverklo init writes). Pointing at the main checkout from a worktree would defeat per-branch isolation.

  • Multiple concurrent Claude Code sessions across different worktrees: safe by default. Different rootPaths = different DB files = no contention.

sverklo init adds .sverklo/ to your .gitignore automatically so the per-worktree journal doesn't get committed.

Any MCP client (one-shot via npx)

npx sverklo /path/to/your/project

No global install needed. npx resolves and runs sverklo on first call. Use this in CI, ephemeral sandboxes, or any host where you don't want a global install.

Claude Code plugin marketplace

Inside Claude Code:

/plugin marketplace add github:sverklo/sverklo
/plugin install sverklo-skill@sverklo-marketplace

Installs the bundled Skill (procedural instructions teaching Claude when to reach for search, impact, review_diff, remember, etc.) without touching your global skills directory.

First run note: The bundled ONNX embedding model (~90 MB) downloads automatically on first launch. It takes ~30 seconds; after that, the bundled embedding provider can run from the cached local model.


Why not... (as of 2026-04)

Alternative

Local

OSS

Code search

Symbol graph

Memory

MR review

License

Cost

Sverklo

yes

yes MIT

hybrid + PageRank

yes

git-aware

risk-scored

MIT

$0

Built-in grep / Read

yes

yes

text only

no

no

no

varies

$0

Cursor @codebase

no (cloud)

no

yes

partial

no

no

proprietary

with Cursor sub

Sourcegraph Cody

no (cloud)

no

yes

yes

no

partial

source-available

$9-19/dev/mo

Claude Context (Zilliz)

no (Milvus)

yes

vector only

no

no

no

MIT

$0 + Milvus

Aider repo-map

yes

yes

no

basic

no

no

Apache 2.0

$0

Greptile

no (cloud)

no

yes

yes

no

yes

proprietary

$30/dev/mo


Lint for AI-readiness — sverklo audit

Most lints check syntax. sverklo audit lints whether your codebase is legible to an AI agent: high blast-radius "god nodes" the agent will trip on, hub files that cascade widely on every change, orphan symbols that might be dead code or might be public API, circular dependencies that confuse the symbol graph, and a security smell scan. Outputs an A-F health grade you can pin as a README badge.

sverklo audit                     # markdown report in the terminal
sverklo audit --format html --open  # self-contained HTML you can share
sverklo audit --badge             # A-F shield markdown for your README
sverklo audit --format sarif      # GitHub code-scanning alerts
sverklo audit --format json       # machine-readable for CI gates

Six formats: markdown, html, json, sarif, csv, badges. Pair with impact (the MCP tool) when you want to see the per-symbol blast radius before refactoring.


CLI tools

Sverklo ships a CLI for CI and local use: sverklo review --ci --fail-on high for risk-scored diff review (auto-detects PR ref in GitHub Actions), sverklo audit for codebase health reports, and a GitHub Action that posts review comments on PRs. Run sverklo audit-prompt or sverklo review-prompt to get battle-tested workflow prompts you can paste into any agent.


Claude Code hooks recipe

Sverklo plays well with Claude Code hooks. The simplest hook to wire is a post-tool-use review: after Claude makes file edits, run sverklo review against the working tree and surface any high-risk findings in the agent transcript. Add this to ~/.claude/settings.json:

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          {
            "type": "command",
            "command": "sverklo review --ref HEAD --format json --fail-on high || true"
          }
        ]
      }
    ]
  }
}

The trailing || true keeps the hook from blocking edits when sverklo isn't installed or the working tree has no diff yet. For project-scoped hooks, put the same block in .claude/settings.json at the repo root instead.


Telemetry

Opt-in and off by default. When telemetry is disabled, it sends nothing. If you opt in, it sends only anonymous usage metrics (no code, queries, file paths, symbol names, or memory contents). Telemetry is separate from the bundled model's first-use download and any explicitly configured remote embedding provider. Full schema and implementation details are in TELEMETRY.md.


Open Source, Open Core

The full MCP server is free and open source (MIT). All 37 tools, no limits, telemetry opt-in and off by default, no "free tier" — that's not where the line is.

Sverklo Pro (later this year) adds smart auto-capture of decisions, cross-project pattern learning, and larger embedding models. Sverklo Team adds shared team memory and on-prem deployment.

The open-core line: Pro adds new things, never gates current things. Anything in the OSS server today stays in the OSS server forever.


Citing Sverklo

If you use Sverklo or its benchmarks (bench:primitives, bench:swe) in research, please cite:

Groshin, N. (2026). Sverklo: A Local-First Code Intelligence MCP Server and a Cross-Repository Software Engineering Benchmark. Zenodo. https://doi.org/10.5281/zenodo.19802051

BibTeX:

@misc{groshin2026sverklo,
  author    = {Groshin, Nikita},
  title     = {{Sverklo}: A Local-First Code Intelligence {MCP} Server and a Cross-Repository Software Engineering Benchmark},
  year      = {2026},
  publisher = {Zenodo},
  doi       = {10.5281/zenodo.19802051},
  url       = {https://doi.org/10.5281/zenodo.19802051}
}

Star history

If sverklo saved your AI from inventing function names that don't exist in your codebase, the most useful thing you can do is ⭐ star this repo and share with one teammate.

License

MIT


Available Tools

36 tools
askA

Natural-language router over sverklo's existing primitives. Maps a question to (a) the closest concept (if the concept index exists), (b) an investigate fan-out, and (c) refs/impact on the top symbols surfaced. Returns a structured answer with evidence — no generated prose. Use when you want a single keystroke that exercises the whole stack; for fine-grained control prefer search / investigate / refs.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNofast (default): one investigate pass + concept lookup. thorough: also expand-graph + a refs probe on top symbols.
queryYesNatural-language question.
scopeNoOptional path prefix.

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the full burden of disclosing behavior. It transparently outlines the internal pipeline (concept lookup, investigate fan-out, refs/impact) and explicitly notes the output format ('structured answer with evidence — no generated prose'). It does not mention edge cases or performance implications, but the core behavioral traits are covered.

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

Conciseness4/5

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

The description is concise and front-loaded, with the core purpose in the first sentence and usage guidance in the final sentence. The parenthetical breakdown of actions is efficient, though slightly dense. It avoids redundancy and stays focused, earning a 4 rather than a 5 due to minor jargon ('sverklo's existing primitives').

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

Completeness4/5

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

No output schema exists, so the description appropriately notes the return type ('structured answer with evidence'). It also covers the three parameters implicitly via the mode and scope hints in the schema, and it explains the tool's role in the broader toolkit. While it does not detail the exact structure of the answer, it provides enough context for an AI agent to understand what to expect.

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

Parameters3/5

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

The input schema already provides 100% parameter coverage, so the description does not need to repeat parameter details. The description adds some contextual meaning by framing the query as a natural-language question and referencing the overall router behavior, but it does not go beyond the schema's descriptions. Baseline of 3 is appropriate because the schema does the heavy lifting.

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

Purpose5/5

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

The description clearly identifies 'ask' as a natural-language router that maps a question to specific actions (concept lookup, investigate fan-out, refs/impact), distinguishing it from sibling tools by explicitly naming search/investigate/refs for finer control. It also states the output type (structured answer with evidence, no prose), leaving no ambiguity about what the tool does.

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

Usage Guidelines5/5

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

The description provides explicit when-to-use guidance: 'Use when you want a single keystroke that exercises the whole stack.' It also gives an explicit when-not-to-use with alternatives: 'for fine-grained control prefer search / investigate / refs,' which directly addresses tool selection relative to siblings.

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

ast_grepA

Find code by AST shape, not text — e.g. 'every console.log($X)', 'every catch (e) { return null }'. Requires ast-grep on PATH. Pick this over search when you need exact structural matches (consistent transformations, lint-style queries) and over Grep when you need to ignore identifier names or whitespace. Falls back to a clear error if ast-grep is missing.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoDefault: project root
patternYese.g. 'console.log($A)'
languageNotypescript, python, rust, go, …

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations, the description discloses a key behavior: it requires ast-grep on PATH and falls back to a clear error if missing, which is important for invocation. It also indicates it performs structural matching beyond text. However, it does not explicitly state whether the tool is read-only or what it returns, though 'Find' implies read-only.

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

Conciseness5/5

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

The description is concise (three sentences) with the main purpose front-loaded. It packs examples, usage guidance, and prerequisite into a compact format with no wasted words.

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

Completeness4/5

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

Given the tool's complexity (AST matching) and the absence of an output schema, the description provides sufficient context: purpose, usage, prerequisites, and fallback. It could mention the result format or limitations, but the schema covers parameters and the purpose is clear. It is reasonably complete for an agent to decide when to use it.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds semantic value by explaining the AST pattern concept with examples ('every console.log($X)') and clarifying how it differs from text search, which directly informs how to construct the pattern parameter. It also mentions language options, though the schema already lists them.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Find code by AST shape, not text' with concrete examples ('every console.log($X)'). It explicitly distinguishes from siblings by saying 'Pick this over search when... and over Grep when...' which provides clear differentiation.

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

Usage Guidelines5/5

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

The description provides explicit when-to-use guidance: 'Pick this over search when you need exact structural matches... and over Grep when you need to ignore identifier names or whitespace.' It also mentions the prerequisite (ast-grep on PATH) and fallback error, offering practical usage context.

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

auditA

One-call codebase health report: god nodes (highest blast-radius symbols), hub files (highest PageRank), orphan symbols (likely dead code), and language/memory stats. Use as the seed for a code-quality pass — pair with impact for blast-radius and deps for fan-in/fan-out. Cheaper than running overview + impact + dependencies separately.

ParametersJSON Schema
NameRequiredDescriptionDefault
token_budgetNoMax tokens to return (default: 4000)

TDQS

A4.4/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full disclosure burden. It adequately conveys the tool performs a read-only aggregation health report, listing the specific analyses it computes. It adds cost/behavioral context ('Cheaper than running...'). Minor gap: doesn't give output format or state that it returns a summary report vs. counts, but for a read tool the behavior is sufficiently transparent.

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

Conciseness5/5

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

Three sentences, fully front-loaded with the core purpose. Each sentence earns its place: the deliverable, the pairing guidance, and the cost tradeoff. Zero filler words.

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

Completeness4/5

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

Given the medium complexity (an aggregating report tool), the description covers what output is produced, how it relates to sibling tools, and the use case. Even without an output schema, the description enumerates the report contents (god nodes, hub reports, orphans, stats), which is enough. Could mention whether the output is a summary text vs. a JSON structure, but description does the job.

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

Parameters3/5

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

Schema coverage is 100% and there is only one parameter (token_budget) fully described as 'Max tokens to return (default: 4000)'. The description adds no additional meaning beyond the schema, so it meets the 3 baseline without needing to compensate.

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

Purpose5/5

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

The description states a specific verb with a resource: 'One-call codebase health report' listing concrete outputs (god nodes, hub files, orphan symbols, language/memory stats). It explicitly names what makes this tool distinct from siblings by comparing it to 'impact' (blast-radius) and 'deps' (fan-in/fan-out), making the purpose unambiguous.

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

Usage Guidelines5/5

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

Explicitly states when to use it: 'Use as the seed for a code-quality pass — pair with impact for blast-radius and deps for fan-in/fan-out.' It even gives the cost-based exclusion: 'Cheaper than running overview + impact + dependencies separately,' letting the agent decide between this consolidated call and running multiple sibling tools.

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

clustersA

Group files into modules by graph-community detection (label propagation over the import graph). Returns 3+ file clusters with their hub file. Use this on first contact with an unfamiliar repo — pair with concepts (after running sverklo concept-index) for an LLM-named summary of each cluster. Skip if the codebase has fewer than ~20 source files; structure won't be informative.

ParametersJSON Schema
NameRequiredDescriptionDefault
min_sizeNoMinimum cluster size to show (default 3)

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries full burden. It explains the algorithm, output shape, and a limitation (small repos uninformative), but doesn't explicitly mention side effects or permission requirements. It's read-only in nature but not stated as such, so I give 4.

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

Conciseness5/5

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

Three compact sentences, front-loaded with an action verb, no redundancy, every sentence earns its place.

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

Completeness4/5

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

For a single-parameter tool with no annotations/output schema, the description adequately covers purpose, usage context, and return shape, though it could detail the hub file concept more.

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

Parameters3/5

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

The schema fully documents min_size with default value, and the description doesn't add parameter-specific semantics, so baseline 3 applies.

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

Purpose5/5

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

The description clearly states the tool groups files into modules via label propagation on the import graph, returns 3+ clusters with a hub file, and differentiates it from siblings like concepts by explicitly positioning it for first contact.

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

Usage Guidelines5/5

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

Explicitly states when to use (first contact with unfamiliar repo) and when to skip (fewer than ~20 source files), and advises pairing with concepts after running sverklo concept-index.

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

conceptsA

Semantic search over LLM-labeled subsystem concepts. Returns the clusters whose label/summary best matches the query, along with each cluster's hub file. Requires the concept index to have been built: run sverklo concept-index once per repo. If no index exists, returns a helpful bootstrapping message.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax concepts to return (default 5).
queryYesNatural-language question: 'where does caching live?', 'show me the auth subsystem', etc.

TDQS

A4.5/5.0
Behavior4/5

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

No annotations are provided, so the description carries the burden. It discloses the read-only nature indirectly as a search, the requirement of a pre-built index, and the bootstrapping message when index is missing. It does not mention rate limits or performance, but these are less critical for a search tool. Overall, it provides beyond the bare minimum.

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

Conciseness5/5

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

Two sentences, dense with information: purpose, return type, prerequisite, and behavior when index missing. No fluff, well-structured.

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

Completeness4/5

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

Provides necessary context: requires index, explains return (clusters+hub files), and mentions fallback message. Doesn't specify output format or potential errors beyond missing index, but for a search tool this is adequate. Slightly more detail on usage context (e.g., when to prefer over other search tools) would push to 5.

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

Parameters5/5

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

Both parameters (query and limit) are described in the schema with 100% coverage. The description reinforces that query is a semantic query, and limit has a default. No ambiguity or missing information.

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

Purpose5/5

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

The description clearly states it performs semantic search over LLM-labeled subsystem concepts, with a specific verb (search) and resource (concepts). It distinguishes from sibling tools like 'search' or 'diff_search' by emphasizing the semantic nature and the output of clusters with hub files.

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

Usage Guidelines4/5

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

It provides clear context that an index must be built first, and mentions what happens if the index is missing. It does not explicitly name alternative tools, but the description implies this is the go-to for concept-level queries. The prerequisite is a strong guideline.

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

contextA

Umbrella context bundler. Give a task description and get a single curated bundle: codebase overview header, semantically relevant code, related symbols, and matching saved memories — in one round trip. Use this as the FIRST call when you start working on a new task and want to orient quickly. PASS budget for a PageRank-pruned repo map fit to a token budget — the ideal way to give an agent a complete mental model of an unfamiliar codebase in one call.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskNoFree-form description of what you're trying to do, e.g. 'add rate limiting to the login endpoint' or 'understand how billing webhooks are processed'. When `budget` is set and no task is given, returns a pure PageRank-ordered repo map.
scopeNoOptional path prefix to constrain the search (e.g. 'src/api/').
budgetNoWhen set, returns a PageRank-pruned repo map greedily filled to this token budget (inspired by aider's repo-map). Files are ordered by PageRank importance, optionally biased toward `task`. Only symbol signatures are rendered — use the atomic tools for full bodies. Typical values: 4000 (snap map), 8000 (full mental model), 16000 (deep context).
excludeNoPath substrings to exclude from the repo map (e.g. ['test', 'migration']).
detail_levelNoHow much to return. minimal=fast/cheap (good for snap orientation); normal=balanced (default); full=adds dependency neighbours. Ignored when `budget` is set.

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the transparency burden. It discloses that results arrive in one round trip, that budget mode returns a PageRank-pruned repo map, and that the bundle includes code, symbols, and memories. It implies a read-only operation without explicitly stating side-effect status, but the described behavior is otherwise well covered.

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

Conciseness5/5

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

The description is three dense, purposeful sentences. It front-loads the core concept, then gives usage timing, then highlights the budget mode. Every sentence earns its place with no repetition or filler.

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

Completeness4/5

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

For a 5-parameter tool with no annotation and no output schema, the description provides a solid mental model: what the bundle contains, when to use it, and how budget changes the result. It could be more explicit about output structure or failure modes, but the described contents and mode guidance are sufficient for initial selection.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds minimal parameter-level value beyond naming budget as the key switch, while the schema already explains task, scope, budget, exclude, and detail_level in detail.

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

Purpose4/5

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

The description clearly states what the tool does: it takes a task description and returns a curated bundle containing codebase overview, relevant code, symbols, and memories. It positions itself as an 'umbrella' bundler for first-call orientation, but it does not explicitly differentiate itself from sibling tools like overview or search.

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

Usage Guidelines4/5

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

The description gives strong usage guidance: 'Use this as the FIRST call when you start working on a new task and want to orient quickly.' It also recommends passing budget for unfamiliar codebase orientation. It does not name sibling alternatives or explicit when-not cases, but the first-call context is clear.

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

critiqueA

Deterministic coverage check for an agent's answer. Takes the evidence ids the agent cited plus the symbols it discussed; verifies each evidence is still current and flags whether the answer missed high-PageRank hubs, symbol definitions, or related doc mentions. Returns a structured critique — no LLM call on the server side.

ParametersJSON Schema
NameRequiredDescriptionDefault
claimNoOptional summary of the agent's claim. Echoed in the critique header.
symbolsNoSymbols the agent discussed by name. Used for hub / doc-coverage checks.
evidence_idsYesEvidence ids (from the fenced evidence blocks) that the agent cited.

TDQS

A4.2/5.0
Behavior4/5

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

Given no annotations, the description carries full responsibility. It explicitly states the tool is deterministic and makes no LLM call, which is important behavioral info. However, it does not explicitly state whether it modifies state or is read-only, though the nature of a coverage check implies no side effects.

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

Conciseness5/5

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

Two concise sentences with no fluff. The description is front-loaded with the key purpose and structure, making it easy to scan.

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

Completeness4/5

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

The tool has 3 parameters, no output schema, and no annotations. The description adequately explains the input usage and general output type (structured critique), but lacks detail on the exact output structure, which could aid an agent. Still, it covers the core functionality well.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds narrative context beyond schema descriptions, explaining that evidence_ids come from fenced blocks and symbols are discussed names, enhancing understanding of how they are used.

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

Purpose5/5

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

The description clearly identifies it as a deterministic coverage check for an agent's answer, specifying the exact inputs (evidence ids and symbols) and outputs (verification of currency, missed hubs/definitions/mentions). It distinguishes itself from sibling tools like 'ask' or 'verify' through the deterministic, no-LLM-call nature.

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

Usage Guidelines3/5

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

The description states what the tool does but does not explicitly guide when to use it versus alternatives. It implies use for coverage analysis after an answer is produced, but lacks when-not or comparison to sibling tools.

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

ctx_grepA

Filter the result blocks of a context handle by regex. Operates on the cached body — no second retrieval. Returns the narrowed body inline.

ParametersJSON Schema
NameRequiredDescriptionDefault
uriYes
headNoOptional cap on returned blocks.
patternYesRegex (or literal if regex is invalid).

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the transparency burden and does well by stating that it operates on cached data, performs no second retrieval, and returns the narrowed body inline. It does not discuss edge cases like no matches or invalid regex, but the schema partially covers the regex fallback.

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

Conciseness5/5

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

The description is two short sentences, front-loaded with the primary action, and every clause adds useful information. No filler or redundant restatement of the tool name.

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

Completeness4/5

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

For a simple filter tool with no output schema and no annotations, the description covers purpose, key behavior, and return style ('narrowed body inline'). It is complete enough for invocation, though it could briefly clarify what a 'result block' is.

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

Parameters3/5

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

Schema description coverage is 67%, covering 'head' and 'pattern' but not 'uri'. The description implicitly links 'uri' to 'context handle' but adds little parameter-specific meaning beyond what the schema already provides. This is adequate but not exceptional.

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

Purpose5/5

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

The description uses a specific verb ('Filter') and a clear resource ('result blocks of a context handle') with a defined criterion ('by regex'). It also adds distinctive behavior ('Operates on the cached body — no second retrieval') that separates it from retrieval-heavy sibling tools.

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

Usage Guidelines4/5

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

The description gives clear context on when this tool is appropriate: when you want to filter an already-cached context handle without triggering a new retrieval. It does not name explicit alternatives or exclusions, so it falls just 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.

ctx_peekA

Return a byte-slice from a single result block of a prior tool call. Use when the agent needs to inspect a specific offset without the full body.

ParametersJSON Schema
NameRequiredDescriptionDefault
lenYesByte length to return.
offsetYesByte offset into the block body.
hit_indexYes0-based index into the block list.
response_idYes

TDQS

A3.6/5.0
Behavior2/5

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

No annotations are provided, so the description must fully disclose behavior. It lacks details about error cases (invalid response_id, out-of-bounds index/offset), read-only nature, and return format. This is insufficient for safe usage.

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

Conciseness5/5

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

Two concise sentences, front-loaded with purpose and usage. 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.

Completeness2/5

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

With 4 required parameters, no annotations, and no output schema, the description should cover return value details and error behavior. It only mentions the basic function, leaving important gaps.

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

Parameters3/5

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

Schema coverage is 75%, so baseline is 3. The description adds no additional meaning beyond the schema parameter descriptions, which is adequate but not helpful.

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

Purpose5/5

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

The description clearly states the tool returns a byte-slice from a prior tool call's result block, uses specific verb and resource, and distinguishes from siblings by mentioning inspecting specific offset without full body.

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

Usage Guidelines4/5

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

The description explicitly states when to use the tool ('when the agent needs to inspect a specific offset without the full body'), but does not provide exclusions or alternatives.

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

ctx_sliceA

Return a byte-slice of a context handle (ctx:///). Use to drill into the body without rerunning the original retrieval. Returns 'expired' if the handle's pinned SHA no longer matches.

ParametersJSON Schema
NameRequiredDescriptionDefault
uriYesctx://<tool>/<id> URI
lengthNoByte length (default 4000)
offsetNoByte offset (default 0)

TDQS

A4.1/5.0
Behavior4/5

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

No annotations are provided, so the description carries full burden. It discloses that the tool returns 'expired' if the handle's SHA no longer matches, which is a key behavioral detail. However, it does not explicitly state it is read-only or non-destructive, nor mention other potential behaviors.

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

Conciseness5/5

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

Two concise sentences, front-loaded with the primary purpose. No unnecessary words or redundancy.

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

Completeness3/5

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

The description does not specify the format of the returned byte-slice (e.g., hex, base64) or error cases beyond 'expired'. Given no output schema, this gap leaves room for ambiguity.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description adds minimal value beyond the schema, only reinforcing the concept of a byte-slice. It does not elaborate on parameter syntax or formats.

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

Purpose5/5

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

The description clearly states it returns a byte-slice of a context handle, using the specific verb 'return' and resource 'ctx://<tool>/<id>'. This distinguishes it from siblings like ctx_grep and ctx_peek.

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

Usage Guidelines4/5

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

The description provides explicit usage context: 'Use to drill into the body without rerunning the original retrieval.' It suggests a scenario but does not compare with other sibling tools or specify 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.

ctx_statsA

Inspect a context handle without consuming it: tool, age, block count, byte size, fresh/expired.

ParametersJSON Schema
NameRequiredDescriptionDefault
uriYes

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly states the key non-consuming behavior and lists what the inspection reveals. It does not cover authentication, error cases, or side effects, but for a simple inspect tool this is reasonable and non-destructive.

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

Conciseness5/5

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

One concise sentence front-loads the action, names the resource, and packs in the returned metadata fields. There is no redundancy or filler.

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

Completeness4/5

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

The tool is simple (one parameter, no output schema, no annotations), and the description adequately lists return fields and the non-consuming guarantee. It could improve by explicitly relating itself to sibling tools like ctx_peek or ctx_slice, but the description is functionally complete for its complexity.

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

Parameters2/5

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

Schema description coverage is 0%, and the description does not explain the 'uri' parameter format, how to reference a context handle, or any constraints. The parameter name is self-evident at a surface level, but the description adds no compensating detail or example.

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

Purpose5/5

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

The description uses a specific verb ('Inspect') with a clear resource ('a context handle') and enumerates the exact attributes returned (tool, age, block count, byte size, fresh/expired). This distinguishes it from consuming operations and other context inspection siblings like ctx_peek, ctx_slice, or ctx_grep.

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

Usage Guidelines3/5

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

It clearly implies use when you need metadata about a context handle without consuming it, but it does not explicitly state when to use this tool over alternatives or provide exclusions. Sibling tool names suggest distinctions, but the description does not name or contrast them.

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

demoteA

Demote a memory from core to archive tier. Archive memories are only retrieved on demand via recall — not automatically injected. Use for memories that no longer need to be in every session.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMemory ID to demote

TDQS

A4.3/5.0
Behavior4/5

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

Given the absence of annotations, the description takes on the burden of disclosing consequences by explaining that archived memories are 'only retrieved on demand via recall — not automatically injected.' This is meaningful behavioral context beyond the action itself, though it stops short of discussing reversibility or side effects.

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

Conciseness5/5

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

Three concise sentences: action, consequence, and usage suggestion. No fluff; every word earns its place.

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

Completeness5/5

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

For a tool with one simple parameter and no output schema, the description covers the purpose, behavior, and when to apply it, fully addressing the likely questions an agent would have.

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

Parameters3/5

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

The schema already describes the single 'id' parameter as 'Memory ID to demote' (100% coverage). The tool description does not add parameter-specific details, only context about the overall operation, so the baseline of 3 applies.

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

Purpose5/5

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

The phrase 'Demote a memory from core to archive tier' uses a specific verb+resource pair, clearly distinguishing it from sibling tools like promote. The additional sentence about archive retrieval semantics further disambiguates what demoting entails.

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

Usage Guidelines4/5

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

It explicitly states 'Use for memories that no longer need to be in every session,' giving a clear when-to-use signal. However, it does not mention when not to use it or name alternative tools such as 'promote' or 'forget'.

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

depsB

Show what a file imports/depends on and what depends on it. Helps understand the impact of changing a file.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesFile path to analyze
depthNoHow many levels deep to traverse (default: 1)
directionNoDirection of dependencies (default: both)
token_budgetNoMax tokens to return (default: 1500)

TDQS

B3.3/5.0
Behavior3/5

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

No annotations, so the description carries the burden. It says 'Show', implying read-only, but doesn't disclose any specific behaviors like rate limits, output size limits, or side effects. It's a safe read but lacks detail.

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

Conciseness5/5

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

Two sentences, front-loaded purpose, no fluff or repetition.

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

Completeness3/5

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

With no output schema and 4 parameters, the description is minimal. It doesn't explain output format or how depth/direction affect results, but the core purpose is clear. Could be more complete for a tool with 4 parameters.

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

Parameters3/5

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

Schema covers 100% of parameters with descriptions, so baseline 3. The description adds no extra semantics beyond what schema already provides. It doesn't explain interplay of depth/direction.

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

Purpose4/5

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

Description states it shows imports and dependents, which is clear and specific. It doesn't explicitly differentiate from siblings like 'refs' or 'impact', but the verb+resource is clear.

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

Usage Guidelines2/5

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

No guidance on when to use this tool vs alternatives. The mention of 'impact of changing a file' implies use for change analysis, but it doesn't compare to similar tools or exclude cases.

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

forgetA

Permanently delete a memory after recall returned a stale or wrong entry. Prefer remember (with the new content) over forget+remember when superseding a decision — supersession preserves the audit trail via valid_until_sha + superseded_by; forget loses it. Get IDs from recall or memories.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMemory ID to delete (from recall results)

TDQS

A4.5/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It clearly states the destructive nature ('Permanently delete') and the consequence of losing the audit trail, which is critical behavioral context. It doesn't mention any other side effects or permissions, but for a simple delete operation, this is sufficient.

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

Conciseness5/5

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

The description is two sentences long, front-loaded with the core purpose, and every sentence adds value. It efficiently covers purpose, usage guidance, and a critical behavioral warning without any fluff.

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

Completeness5/5

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

For a simple tool with one parameter, 100% schema coverage, and no output schema, the description is complete. It explains the purpose, when to use it, how to get the ID, and the key behavioral trade-off (losing audit trail). No additional information is needed.

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

Parameters3/5

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

The schema already provides 100% coverage for the single parameter 'id' with a description ('Memory ID to delete (from recall results)'). The tool description reinforces this by saying 'Get IDs from recall or memories.' The description adds minimal extra meaning beyond the schema, so a baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Permanently delete a memory after recall returned a stale or wrong entry.' It uses a specific verb (delete) and resource (memory), and distinguishes it from the sibling 'remember' tool by explaining the difference in handling supersession.

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use this tool vs. alternatives: 'Prefer remember (with the new content) over forget+remember when superseding a decision — supersession preserves the audit trail via valid_until_sha + superseded_by; forget loses it.' It also tells the user how to get IDs: 'Get IDs from recall or memories.'

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

grep_resultsA

Filter the result blocks of a prior sverklo tool call by a regex pattern — operates on the cached text so no second retrieval happens. Pass the response_id returned on any search/refs/impact call.

ParametersJSON Schema
NameRequiredDescriptionDefault
patternYesRegex (or literal if regex is invalid).
response_idYesThe rsp_... id from an earlier call.

TDQS

A4.2/5.0
Behavior4/5

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

The description discloses that it operates on cached text (no second retrieval), requires a prior response_id, and uses regex with fallback to literal. With no annotations, it provides key behavioral details, though it does not cover error handling for invalid response_ids.

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

Conciseness5/5

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

Two sentences with no wasted words. Front-loaded with the action and key behavior, then provides necessary parameter context.

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

Completeness4/5

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

Given the tool's simplicity (2 params, no output schema, no annotations), the description covers the purpose, usage, and parameters adequately. It lacks details on output format or errors, but the tool is straightforward.

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

Parameters3/5

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

Schema coverage is 100%, so baseline is 3. The description repeats the schema's parameter descriptions exactly, adding no new semantic value beyond what the schema already provides.

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

Purpose5/5

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

The description clearly states the verb 'Filter', the resource 'result blocks of a prior sverklo tool call', and the mechanism 'by a regex pattern' with the nuance of operating on cached text, distinguishing it from siblings like search or recall.

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

Usage Guidelines4/5

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

The description explicitly says when to use: when you have a response_id from a prior search/refs/impact call and want to filter without re-retrieving. It does not explicitly state when not to use, but the context is clear and sufficient for an AI agent.

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

head_resultsA

Keep only the top N result blocks of a prior sverklo tool call. Cheap way to shrink a chatty response when you just need the top hit.

ParametersJSON Schema
NameRequiredDescriptionDefault
nYesMax blocks to keep.
response_idYes

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description must fully disclose behavior. It states the core action (keep top N blocks) and implies it is cheap. However, it does not detail error handling, idempotency, or side effects. The disclosure is adequate but not thorough.

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

Conciseness5/5

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

The description is two sentences and very concise. The first sentence fronts the main purpose, with no wasted words.

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

Completeness3/5

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

Given the simplicity of the tool (2 required params, no output schema, no nested objects), the description is somewhat complete. However, it lacks details on error cases (e.g., invalid response_id) and assumes knowledge of 'sverklo tool call.' It is minimally sufficient for a straightforward tool.

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

Parameters2/5

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

Schema description coverage is 50%, but the tool description adds no extra meaning to parameters. The 'n' parameter is already described in the schema, and 'response_id' has no description in either place. The description does not compensate for the missing schema documentation.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Keep only the top N result blocks of a prior sverklo tool call.' It also provides context ('Cheap way to shrink a chatty response') and distinguishes from sibling tools like grep_results and ctx_slice.

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

Usage Guidelines4/5

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

The description indicates when to use it: 'when you just need the top hit.' It implies a simple filtering use case, but does not explicitly mention when not to use it or name alternatives.

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

impactA

Refactor blast-radius: callers of a symbol with confidence scoring. Run before editing. Use cross_repo:true to see impact across linked projects in a workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax references to return (default 50)
symbolYesThe function/class/type name to find references for
cross_repoNoInclude cross-repo impact from workspace projects (default false)
partition_thresholdNoWhen the caller count exceeds this, return a partition plan instead of a raw list (default 80). Set to 0 to disable partitioning and always dump the raw list.

TDQS

A3.6/5.0
Behavior2/5

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

No annotations are provided, so the description must disclose behavior. It does not state whether it's read-only, what output format to expect, or how partition_threshold affects results. The hint 'Run before editing' implies safety but doesn't explicitly confirm non-mutating behavior.

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

Conciseness5/5

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

Two sentences, front-loaded with the core purpose, no filler. Every word earns its place.

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

Completeness2/5

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

The tool has 4 parameters and no output schema, and the description does not explain output format, partition behavior, or limitations. It's insufficient for a complex analysis tool.

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

Parameters3/5

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

Schema covers 100% of parameters, so baseline is 3. The description adds a hint about cross_repo, which adds some value, but doesn't explain other parameters beyond schema.

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

Purpose5/5

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

The description clearly states it finds callers of a symbol with confidence scoring, giving a specific verb and resource. It distinguishes from siblings like 'refs' by mentioning confidence scoring and cross-repo capability.

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

Usage Guidelines4/5

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

It explicitly says 'Run before editing' and suggests using cross_repo:true for workspace impact, giving clear usage context. However, it does not mention alternatives 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.

investigateA

Single-call research primitive: fans out to BM25, embeddings, symbol lookup, and reference-expansion in parallel; RRF-fuses the candidates; returns one ranked bundle with per-hit provenance (which retriever(s) found it). Cheaper than running search + refs + lookup back-to-back. WORKS WELL for open-ended questions where you don't yet know whether the answer lives in code, callers, or documentation — the found_by tags tell you which signal agreed. Use search instead when you already know you want pure text/semantic retrieval.

ParametersJSON Schema
NameRequiredDescriptionDefault
repoNoOptional: name of a registered repo to investigate (see list_repos). Defaults to the current workspace. Use this to investigate a sibling project that has been sverklo-init'd but isn't the current cwd.
queryYesNatural-language question or exploration target.
scopeNoOptional path prefix to limit all retrievers to, e.g. 'src/api/'.
budgetNoMax candidates per sub-retriever (default 50). Higher = broader fusion at some latency cost.
max_hitsNoMax hits to display in the response (default 10).
expand_graphNoRun a 5th retriever that expands top hits one hop along typed edges (calls/documents/imports/extends). Improves recall on multi-hop questions at small latency cost. Default false.

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full behavioral burden. It explains the internal parallel retrieval strategy (BM25, embeddings, symbol lookup, reference expansion), RRF fusion, the per-hit provenance signal, latency trade-offs, and the optional fifth retriever. It does not explicitly mention side effects or permissions, but this reads as a read-only research operation, so the disclosure is solid.

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

Conciseness5/5

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

The description is front-loaded with the core purpose, uses a short actionable paragraph, and provides the key usage guidance in a single clearly marked sentence. Every sentence adds value; no redundancy or fluff.

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

Completeness4/5

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

The tool is complex, has six parameters, and no output schema, but the description covers the main return shape, provenance, and use case well. It could be even more complete by noting response contents or edge cases, but overall it gives an agent enough context to decide when to call it and what to expect.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter already has a thorough description. The tool description adds contextual framing like budget affecting fusion breadth and expand_graph being a fifth retriever, but it mostly reinforces rather than substantially extends what the schema already provides.

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

Purpose5/5

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

The description is built around a specific action: a single-call research primitive that fans out to multiple retrievers, fuses them, and returns one ranked bundle with provenance. It clearly distinguishes itself from search and refs/lookup, so the tool's purpose is unambiguous and unique among siblings.

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

Usage Guidelines5/5

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

The description explicitly states when to use the tool: open-ended questions where the answer could live in code, callers, or documentation. It also gives an exact alternative condition: use search instead when pure text/semantic retrieval is wanted, and notes this approach is cheaper than chaining search + refs + lookup.

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

lookupA

Look up a specific symbol (function, class, type, variable) by name. Returns its full definition, signature, and location.

ParametersJSON Schema
NameRequiredDescriptionDefault
repoNoOptional: name of a registered repo to search (see list_repos). Defaults to the current workspace. Use this to look up a symbol in a sibling project that has been sverklo-init'd but isn't the current cwd.
typeNoFilter by symbol type
symbolYesSymbol name to look up (exact or prefix match)
token_budgetNoMax tokens to return (default: 2000)

TDQS

A3.6/5.0
Behavior3/5

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

No annotations provided, so description carries burden. It discloses it returns definition, signature, location, but does not mention behavior on not found, partial matches, or token budget constraints.

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

Conciseness5/5

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

Two efficient sentences with no waste.

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

Completeness4/5

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

Adequately covers purpose and output for a lookup tool with 4 parameters. No output schema, but description states return contents.

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

Parameters3/5

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

Schema coverage is 100%, so baseline is 3. Description adds minimal extra meaning beyond what schema already provides.

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

Purpose5/5

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

The description clearly states it looks up a symbol by name and returns definition, signature, and location. It distinguishes from sibling tools like 'search' or 'grep' which are more generic.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives. With many sibling tools, explicit usage context is missing.

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

memoriesA

List all memories for the current project, or surface conflict candidates. Default mode shows memory health (staleness, confidence, access frequency). Pass mode: "conflicts" to surface pairs of active memories that share a pin and may contradict — the bi-temporal model preserves both, so this is a review prompt for the agent or human, not an auto-resolution.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNolist (default): show active memories. conflicts: pairs of active memories sharing a pin that may contradict (decision/preference/pattern categories only).
limitNoMax memories (list mode) or conflict pairs (conflicts mode) to return (default: 50 / 25)
categoryNoFilter by category in list mode (default: 'any')
stale_onlyNoList mode: only show stale memories (default: false)

TDQS

A4.4/5.0
Behavior5/5

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

With no annotations provided, the description carries the full behavioral disclosure burden and does so well. It reveals that default mode shows health metrics (staleness, confidence, access frequency), that only decision/preference/pattern categories are considered in conflicts mode, and that the bi-temporal model preserves both memories—making this explicitly non-destructive.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the primary action, and every clause adds useful behavior or context. There is no filler or repetition of schema details.

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

Completeness5/5

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

Despite having no output schema and no annotations, the description is complete enough for a moderately complex two-mode tool. It explains the default behavior, the conflict criteria, the reasoning behind preserving conflicts, and the expected action (review prompt), covering what an agent needs to invoke it correctly.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, and the description adds meaningful context beyond the schema by explaining what the default mode reports and what conflict pairs represent. It doesn't need to restate the other parameters since the schema already documents them clearly.

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

Purpose4/5

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

The description clearly states the tool lists memories for the current project and can surface conflict candidates, using specific verbs and resources. It effectively differentiates the two modes, though it does not explicitly reference sibling tools like search or recall.

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

Usage Guidelines4/5

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

The description gives clear context on when to use each mode: default for memory health overview, conflicts for surfacing potentially contradictory active memories. It also clarifies that the conflicts mode is a review prompt rather than auto-resolution, which helps the agent decide when to use it.

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

overviewA

Get a structural map of the codebase. Shows the most important files and their key symbols ranked by dependency importance (PageRank). Use this FIRST when starting work on an unfamiliar codebase or directory.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoDirectory to overview (default: project root)
depthNoProgressive disclosure: 1 = directories only, 2 = directories + filenames, 3 (default) = directories + files + top symbols, 4 = include all named exports. Borrowed from iwe-org/iwe's `squash`/`tree` pattern. Lower depth costs fewer tokens — use the cheapest depth that still answers the question.
token_budgetNoMax tokens to return (default: 3000)

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It explains the output nature (dependency-importance ranking via PageRank) and implies read-only via 'Get,' but it does not explicitly state that there are no side effects, nor does it disclose potential token costs or limitations beyond what the schema provides. There is useful behavioral context, but some gaps remain.

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

Conciseness5/5

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

The description is two sentences: the first states the tool's purpose, and the second provides usage guidance. It is front-loaded, concise, and every sentence earns its place. No fluff or redundant explanation.

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

Completeness4/5

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

The tool is relatively simple, has all parameters documented in the schema, and no output schema exists to explain. The description covers the core behavior and usage context. It could also mention that the read operation is safe and that token_budget controls output size, but given the schema covers the latter and the purpose is clear, this is sufficiently complete.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description does not add any new parameter-level meaning beyond the schema, but the schema itself fully documents `path`, `depth`, and `token_budget`, including the progressive disclosure pattern. The description's reference to 'structural map' indirectly relates to `path`, but it does not go beyond schema.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Get a structural map of the codebase.' It specifies the output ('most important files and their key symbols ranked by dependency importance (PageRank)') and distinguishes itself from siblings by focusing on high-level structure and ranking. This is a specific verb+resource combination with a clear scope.

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

Usage Guidelines4/5

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

The description gives explicit when-to-use guidance: 'Use this FIRST when starting work on an unfamiliar codebase or directory.' This is clear and context-rich, but it does not mention when not to use it or name alternative tools. The guidance is strong but lacks the 'when-not/alternatives' component for a full 5.

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

patternsA

Query the LLM-derived design-pattern annotations on indexed symbols. Pass a pattern from the closed taxonomy (observer, repository, validator, ...) to list every symbol tagged with it; pass no args to see the taxonomy + counts. Requires sverklo enrich-patterns to have been run.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax rows to return (default 25).
patternNoOne of: factory, builder, singleton, prototype, object_pool, adapter, decorator, facade, proxy, composite, bridge, flyweight, observer, strategy, command, iterator, state, template_method, visitor, mediator, chain_of_responsibility, memento, repository, service, controller, middleware, validator, serializer, event_handler, router, store, view.

TDQS

A4.4/5.0
Behavior4/5

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

There are no annotations, so the description carries the transparency burden. It discloses that the data is LLM-derived, that the tool requires a prior enrich-patterns command, and that calling with no arguments returns taxonomy counts. Behavior around error states or stale indexing is not detailed, but the key prerequisite and mode-dependent behavior are present.

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

Conciseness5/5

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

The description is two sentences, front-loads the main purpose, and uses compact clauses to pack in prerequisites, required arguments, and the no-arg behavior. Every phrase contributes useful information without redundancy.

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

Completeness4/5

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

For a simple optional-parameter query tool with no output schema, the description covers tool purpose, argument semantics, invocation modes, and the prerequisite command. It slightly under-specifies edge cases like behavior when only `limit` is passed with no pattern, but overall it gives enough context for correct use.

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

Parameters4/5

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

The schema already documents both parameters with 100% coverage, so the baseline is 3. The description adds actual semantic value by explaining that omitting arguments returns the taxonomy plus counts, and by reinforcing that `pattern` must come from a closed taxonomy. It could be slightly clearer about passing `limit` alone, but overall it enriches the schema.

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

Purpose5/5

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

The description has a specific verb ('Query') and a clear resource ('LLM-derived design-pattern annotations on indexed symbols'), and elaborates the two main usage modes: filtering by a pattern or seeing the taxonomy and counts. This clearly distinguishes it from sibling tools like 'search' or 'lookup' because it targets a closed taxonomy of design-pattern annotations.

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

Usage Guidelines4/5

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

The description tells the agent when to use this tool ('to list every symbol tagged with a pattern') and explicitly covers the no-arg case for discovering the taxonomy and counts. It also notes an important precondition (`sverklo enrich-patterns`). No explicit alternatives are named, but guidance is clear enough for a single-purpose query tool.

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

pinA

Pin a memory to a specific file or symbol. Pinned memories surface automatically when recalling by that file path or symbol name, without needing semantic search.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetYesFile path or symbol name to pin the memory to
memory_idYesMemory ID to pin (from recall/memories results)

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description is the only source of behavioral information. It discloses the key outcome (pinned memories surface automatically when recalling by path/symbol) but does not mention whether pinning is idempotent, reversible via unpin, or has any side effects beyond surfacing. This is adequate but incomplete.

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

Conciseness5/5

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

A single sentence that front-loads the action and includes the most important behavioral detail. No filler or redundancy.

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

Completeness4/5

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

Given only two simple parameters, no output schema, and no annotations, the description covers the core purpose and effect well. Minor gaps remain around return behavior and duplicate pinning, but these are not critical for this simple operation.

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

Parameters3/5

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

Schema description coverage is 100%, with both parameters clearly described. The tool description adds no meaning beyond the schema, so the baseline of 3 is appropriate.

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

Purpose5/5

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

The description uses a specific verb ('Pin') and resource ('a memory to a specific file or symbol'), and clearly distinguishes itself from sibling tools like unpin and recall. It also states the functional consequence, which removes ambiguity.

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

Usage Guidelines4/5

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

The description implies when to use this tool: to attach a memory to a file path or symbol so it surfaces automatically during recall without semantic search. It does not explicitly list exclusions or compare against alternative approaches, but the context is clear enough for an agent.

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

promoteA

Promote a memory to the core tier. Core memories are auto-injected into every session via sverklo://context resource — use for project invariants that should always be in the AI's context (style rules, framework conventions, 'never do X' rules).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMemory ID to promote (from recall/memories results)

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It goes beyond the action by explaining the consequence: core memories are auto-injected into every session via the sverklo://context resource. It adds meaningful context about the tool's effect, though it does not mention reversibility or permission requirements.

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

Conciseness5/5

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

The description is concise: two sentences that front-load the primary action and then provide essential context about the core tier and usage. Every word contributes, with no filler or repetition.

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

Completeness5/5

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

For a simple single-parameter tool with no output schema, this description is fully sufficient. It covers what the tool does, when to use it, and the behavioral effect (auto-injection), even including the specific resource URI. No critical information is missing.

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

Parameters3/5

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

The schema already documents the 'id' parameter with a clear description ('Memory ID to promote from recall/memories results'), giving 100% schema coverage. The tool description does not add any additional parameter semantics, so the baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states 'Promote a memory to the core tier' with a specific verb and resource. It further explains what 'core tier' means (auto-injected into every session) and provides example use cases (style rules, framework conventions), distinguishing it from other memory operations like pin or demote.

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

Usage Guidelines4/5

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

The description gives explicit usage guidance: 'use for project invariants that should always be in the AI's context'. This tells the agent when to use the tool. It does not explicitly mention when not to use it or alternative tools, but the context is clear enough to guide selection.

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

recallA

Search memories semantically. Finds past decisions, preferences, and patterns relevant to a query. Supports two specialized modes: mode=core returns only the always-on project invariants (fast, no query needed — use at session start); mode=archival searches the full archive with semantic ranking; mode=all (default) searches both. Use core for 'what are the project-wide rules I must not violate' and archival for 'what did we decide about X on this codebase'.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoCognitive-axis filter (default: 'any'). episodic = moment-bound events, semantic = timeless facts/rules, procedural = how-tos. Orthogonal to category.
modeNoWhich memory tier to search. 'core' = always-on invariants only, 'archival' = searchable long tail, 'all' = both (default).
limitNoMax memories to return (default: 10)
queryNoWhat to search for in memories (optional when mode=core)
categoryNoFilter by category (default: 'any')
include_staleNoInclude stale memories (default: false)

TDQS

A4.3/5.0
Behavior4/5

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

Despite no annotations, the description transparently discloses the three search modes, their behaviors, and how they depend on the query parameter. It implies a read-only, semantic search operation. Explicitly stating it is non-destructive or idempotent would raise the score, but the current description is still clear.

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

Conciseness5/5

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

The description is concise (4 sentences), front-loaded with the primary purpose, and well-structured. Each sentence adds distinct information: purpose, mode description, usage guidance. No redundant or filler content.

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

Completeness3/5

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

The description lacks information about the return value format or structure. Given no output schema, the agent must infer what the tool returns (e.g., list of memories with relevance). Including a brief note like 'returns a list of matching memories with scores' would improve completeness.

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

Parameters4/5

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

With 100% schema coverage, the description adds significant value beyond the schema by illustrating when to use each mode and explaining the difference between 'core', 'archival', and 'all'. It also clarifies that 'query' is optional for 'core' mode, which is not obvious from the schema alone.

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

Purpose5/5

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

The description clearly states 'Search memories semantically' with specific verb and resource. It distinguishes the tool's purpose by listing what it finds (decisions, preferences, patterns) and describes three specialized modes with distinct behaviors, differentiating it from sibling tools like 'search' and 'memories'.

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

Usage Guidelines4/5

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

The description explicitly advises when to use each mode: 'core' for project-wide invariants at session start, 'archival' for historical decisions. It does not, however, compare this tool to alternatives like 'search' or 'investigate', which would improve context for tool selection among many siblings.

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

refsA

Find all references to a symbol across the codebase. Shows where a function, class, or type is imported, called, or used. Matches on identifier word boundaries by default — embed does NOT match embeddingStore. Pass exact: false to opt into substring matching.

ParametersJSON Schema
NameRequiredDescriptionDefault
exactNoWhen true (default), match on whole-identifier boundaries — `embed` won't match `embeddingStore`. When false, substring-match like the old behavior.
symbolYesSymbol name to find references for
token_budgetNoMax tokens to return (default: 2000)

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations provided, the description fully carries the behavioral disclosure burden. It clearly states the tool is read-only (finding references) and explains the matching behavior (default whole-identifier, optional substring). It does not mention performance or indexing, but the key behavioral traits are covered.

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

Conciseness5/5

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

Two sentences with no fluff. The first sentence states the purpose, the second explains matching behavior and the optional parameter. Every sentence earns its place, and it is front-loaded with the core action.

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

Completeness3/5

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

The description does not explain what the return format looks like (e.g., list of files with line numbers). Since there is no output schema, the agent needs this context to use the result effectively. For a query tool, this is a notable gap.

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

Parameters4/5

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

Schema coverage is 100% (all parameters described). The description adds value by providing a concrete example of the default matching behavior ('embed does not match embeddingStore'), which reinforces the schema's explanation of the 'exact' parameter. For other parameters, it largely restates schema info, but the example enhances understanding.

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

Purpose4/5

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

The description clearly states 'Find all references to a symbol across the codebase' with specific details on what kinds of references (imported, called, used). It differentiates itself from siblings like 'search' or 'grep_results' by focusing on symbol references, but does not explicitly contrast alternatives.

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

Usage Guidelines3/5

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

The description explains when to use the tool (to find references) and describes the exact matching behavior, but it does not provide explicit guidance on when not to use it or how it compares to sibling tools like 'search' or 'grep_results'. Usage is implied but not fully elaborated.

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

rememberA

Save a persistent memory tied to git state. Auto-invalidates conflicting prior memories.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoCognitive-science axis: episodic = a moment-bound event/decision, semantic = a timeless fact/rule, procedural = a how-to. Defaults from category (procedural→procedural, preference/pattern→semantic, else→episodic).
tagsNoOptional tags
tierNocore auto-injects each session, archive is searched on demand
scopeNoproject (default) saves to this repo's memory store. workspace saves to a shared store at ~/.sverklo/workspaces/<name>/memories.db, discoverable across every other repo in the same workspace. Use workspace for cross-repo decisions ('we use Postgres everywhere'); use project for repo-specific context.
contentYesThe memory to save
categoryNoDefault: context. Use procedural for 'always do X' rules. Use correction when the user is fixing a prior model mistake ("stop using em-dashes", "never call this method again") — mirrors the AI Edge memory taxonomy and the bench:research Corrections category in markdown export.
confidenceNo0.0-1.0, default 1.0
related_filesNoFiles this memory relates to (enables staleness detection)

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations provided, the description carries full burden. It discloses a key behavioral trait: auto-invalidation of conflicting prior memories. However, it does not detail the invalidation process or authorization requirements.

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

Conciseness5/5

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

The description is two concise sentences with no redundant information. It is front-loaded with the core action and key behavior.

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

Completeness3/5

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

For a tool with 8 parameters and no output schema, the description is relatively short. It covers the essential purpose and a key behavior but lacks deeper context on parameter relationships or usage patterns that would aid an agent.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all parameters. The description adds the 'git state' context but does not elaborate on individual parameter usage beyond what the schema provides. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool saves a persistent memory tied to git state and auto-invalidates conflicting prior memories. This distinguishes it from sibling read tools like 'memories' and 'recall'.

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

Usage Guidelines3/5

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

The description implies usage for saving memories but provides no explicit guidance on when to use this tool versus alternatives like 'pin' or 'memories'. No exclusions or alternatives mentioned.

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

review_diffA

Diff-aware context bundler for code review. Takes a git ref or range and returns: changed files, semantic delta (added/removed/modified symbols), dangling references for removed symbols, impact set for modified symbols, and similar-symbol detection for added ones. Replaces 10-20 grep+read calls with one structured response. Use this FIRST when reviewing an MR/PR — it surfaces blast radius and convention violations grep cannot see.

ParametersJSON Schema
NameRequiredDescriptionDefault
refNoGit ref or range. Examples: 'HEAD' (uncommitted + last commit), 'main..HEAD' (branch vs main), 'abc123..def456'. Default: main..HEAD.
max_filesNoCap on number of files to analyze. Default: 25.
token_budgetNoMax tokens to return. Default: 4000.
include_added_similarityNoDetect duplicates among added symbols. Default: true.

TDQS

A4.6/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses the tool's behavior well: it returns a structured bundle of diff analysis, including semantic delta, dangling references, impact set, and similarity detection. It also implies a read-only operation (no mutation mentioned). However, it doesn't disclose potential side effects like token consumption or performance implications, but given the tool's nature (analysis), this is adequate. The description adds value beyond the schema by explaining what the tool does with the diff.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the core purpose, and every sentence earns its place. The first sentence defines the tool and its outputs; the second provides usage guidance and value proposition. No fluff or repetition.

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

Completeness4/5

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

Given the tool's complexity (diff analysis with multiple output types) and the absence of an output schema, the description does a good job of explaining what the tool returns. It covers the main use case (MR/PR review) and the key outputs. It could be more complete by mentioning the format of the response (e.g., JSON structure) or how to interpret the impact set, but the description is sufficient for an agent to decide to invoke it. The lack of an output schema is partially compensated by the description's enumeration of outputs.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds value by explaining the 'ref' parameter in context ('git ref or range') and the overall purpose of the tool, which helps understand how parameters like max_files and token_budget relate to the output. However, it doesn't add much beyond the schema for individual parameters, but the schema already covers them well. The description's mention of 'semantic delta' and 'impact set' gives context for why token_budget matters.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Diff-aware context bundler for code review' with a specific verb ('Takes a git ref or range') and resource ('code review'). It enumerates the exact outputs (changed files, semantic delta, dangling references, impact set, similar-symbol detection), which distinguishes it from siblings like diff_search, ast_grep, and grep_results. The description also positions it as a high-level aggregator, not a low-level search tool.

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

Usage Guidelines5/5

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

The description explicitly says 'Use this FIRST when reviewing an MR/PR' and contrasts it with alternatives: 'Replaces 10-20 grep+read calls with one structured response' and 'surfaces blast radius and convention violations grep cannot see.' This gives clear when-to-use guidance and implicitly when-not-to-use (when you need raw grep results or specific symbol lookups).

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

search_iterativeA

Wider-pool, iterative-friendly variant of search. Returns a ctx:// handle to the top-200 candidate pool plus refinement hints (co-occurring symbols, dominant directories, concept overlap). Use ctx_grep / ctx_slice to refine without firing another retrieval. Worth the extra latency (~50ms) on hard multi-hop questions; for single-shot lookups use search.

ParametersJSON Schema
NameRequiredDescriptionDefault
poolNoCandidate pool size (default 200). Capped at 500.
repoNoOptional: name of a registered repo to search (see list_repos). Defaults to the current workspace. Use this to widen the iterative search over a sibling project that has been sverklo-init'd but isn't the current cwd.
queryYes
scopeNoOptional path prefix.

TDQS

A4.5/5.0
Behavior4/5

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

No annotations are provided, so the description carries the burden. It discloses the return format (ctx:// handle), the top-200 cap, and the latency tradeoff (~50ms). It does not explicitly state read-only behavior, but 'search' context implies it, reducing but not eliminating ambiguity.

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

Conciseness5/5

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

Three sentences: purpose, return/value, and usage guidance. Every sentence earns its place, and key information is front-loaded. No fluff or redundancy.

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

Completeness5/5

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

Despite the absence of an output schema, the description adequately explains return values (ctx handle, refinement hints), describes the intended use case, and covers performance. It is sufficient for an agent to judge invocation and next steps without external details.

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

Parameters3/5

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

Schema description coverage is 75%, so the schema handles most param meanings. The description adds context about the top-200 pool and refinement hints, but does not elaborate on the parameters beyond the schema. It provides no extra semantic value for the query parameter, which lacks a schema description.

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

Purpose5/5

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

Description clearly defines a 'Wider-pool, iterative-friendly variant of search', distinguishing it from the sibling 'search' tool. It specifies the resource (candidate pool) and the action (returns a ctx:// handle with refinement hints).

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

Usage Guidelines5/5

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

Explicitly states when to use: 'hard multi-hop questions' and when not to: 'for single-shot lookups use search'. It also names alternative tools (ctx_grep, ctx_slice) for refinement, giving clear usage boundaries.

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

statusA

Project state + tool usage guide. Returns index health (files, chunks, languages), memory summary, and specific tool recommendations tailored to this codebase. Call this first when starting a new session to understand what sverklo knows about the project.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

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

No annotations are provided, but the description indicates the tool returns data. It does not mention side effects or safety, but given it has no parameters and seems purely informative, the description is adequate.

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

Conciseness5/5

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

The description is two sentences, front-loading the key information and providing usage guidance without any wasted words.

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

Completeness4/5

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

For a simple tool with no parameters and no output schema, the description covers purpose and usage. It could benefit from a brief note on return structure or examples, but is largely complete.

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

Parameters4/5

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

There are no parameters, so the baseline is 4. The description adds context about the returned data but no parameter information is needed.

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

Purpose5/5

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

The description clearly states the tool returns project state (index health, memory summary) and tool recommendations, and distinguishes itself from siblings by explicitly recommending it as the first call in a session.

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

Usage Guidelines5/5

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

The description explicitly says 'Call this first when starting a new session to understand what sverklo knows about the project,' providing strong usage guidance and context.

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

test_mapA

Map a git diff to its test coverage. Given a ref/range, lists which tests likely cover each changed source file (via name heuristics + import graph), flags changed source files with NO matching tests, and shows which test files were modified in the diff. Use this during MR/PR review to answer 'what tests should I run?' and 'is this change tested?' without grepping the whole repo. Coverage is heuristic — sverklo doesn't run code, so treat results as candidates, not ground truth.

ParametersJSON Schema
NameRequiredDescriptionDefault
refNoGit ref or range. Default: main..HEAD
include_importersNoAlso surface test files that import the changed file via the dependency graph (not just name matches). Default: true.

TDQS

A4.2/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses the heuristic nature: 'Coverage is heuristic — sverklo doesn't run code, so treat results as candidates, not ground truth.' This is a key behavioral caveat beyond the obvious read-only mapping operation.

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

Conciseness5/5

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

Four sentences, each earning its place: the first states the core purpose, the second details outputs, the third gives usage context, and the fourth adds a critical caveat. It is front-loaded and free of redundancy.

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

Completeness4/5

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

With no output schema, the description adequately summarizes what the tool returns (lists, flags, shows). It covers defaults via the schema and adds usage context and caveats. A more precise return format would be nice, but it's not necessary for an agent to invoke it correctly.

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

Parameters3/5

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

Schema description coverage is 100% for both parameters, so the baseline is 3. The description adds slight context by aligning 'name heuristics + import graph' with include_importers and 'ref/range' with ref, but it doesn't provide new syntax or format details beyond the schema.

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

Purpose5/5

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

The description opens with 'Map a git diff to its test coverage,' a specific verb+resource pair. It then enumerates distinct outputs (lists likely tests, flags untested files, shows modified test files), making its purpose unmistakable and distinguishing it from sibling diff/search tools.

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

Usage Guidelines4/5

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

It explicitly advises using this tool 'during MR/PR review to answer...' and contrasts it with 'without grepping the whole repo.' However, it doesn't provide explicit 'when not to use' guidance or name alternative tools, so it lacks the full exclusion criteria for a 5.

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

unpinC

Remove a pin from a memory.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetYesFile path or symbol name to unpin from
memory_idYesMemory ID to unpin

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It states the action (remove) but doesn't disclose any side effects, such as whether the pin is permanently deleted or if there are any restrictions (e.g., cannot unpin if memory is in use). It also doesn't mention if the operation is reversible or what happens if the pin doesn't exist.

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

Conciseness4/5

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

The description is a single sentence, concise and to the point. It's appropriately sized for a simple operation. No wasted words.

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

Completeness2/5

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

Given the tool is simple (2 params, no output schema), the description is minimal but lacks context about the effect of unpinning, any prerequisites, or what happens after. It doesn't explain the relationship between memory_id and target, or whether both are required together. The description is adequate for a trivial tool but could be more complete.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents both parameters. The description adds no additional meaning beyond what the schema provides. The baseline is 3, and the description doesn't add extra context like parameter relationships or constraints.

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

Purpose4/5

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

The description 'Remove a pin from a memory' clearly states the action (remove) and the resource (pin from a memory). It distinguishes from the sibling tool 'pin' which presumably adds a pin. However, it doesn't explicitly mention the target parameter (file path or symbol name) which is part of the purpose, but the schema covers that.

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

Usage Guidelines2/5

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

No guidance on when to use this tool vs alternatives. It doesn't mention that it's the inverse of 'pin' or when unpinning is appropriate. The description is minimal and doesn't provide context on prerequisites or typical use cases.

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

verifyA

Check whether one or more evidence ids (from a prior search-family tool's ```evidence block) still point to the same code they did at retrieval time. Returns unchanged / moved / modified / deleted / file_missing per id. Use this to prevent hallucinated citations after code changes.

ParametersJSON Schema
NameRequiredDescriptionDefault
claimNoOptional human-readable claim the ids support. Echoed back in the header — useful for audit logs.
evidence_idsYesList of ev_xxxxxx ids to verify.

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It reveals the output statuses, implying the tool is safe and read-only without explicitly stating side effects. It also clarifies the purpose (combating hallucinated citations), which adds context beyond the tool name. Minor gap: does not explicitly confirm no mutations, but the verification nature makes this unlikely.

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

Conciseness5/5

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

Two sentences, the first explaining what the tool does and returns, the second stating the use case. No fluff, zero wasted words, and the most critical information (purpose and output) is front-loaded. This is a model of concise, well-structured documentation.

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

Completeness5/5

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

Given only two parameters and no output schema, the description is complete: it defines the input (evidence ids from prior search), the output categories, and the scenario in which it is useful. There are no missing behavioral traits or obscure edge cases that the description should cover for a tool of this simplicity. It fully supports an agent in selecting and invoking the tool correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents both parameters (evidence_ids list and optional claim). The description adds nothing beyond the schema; it reuses the id format and does not elaborate on behavior or edge cases for either parameter. Baseline 3 is appropriate because the description does not add extra meaning beyond the structured schema.

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

Purpose5/5

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

The description clearly states the tool's function: checking whether evidence ids still point to the same code, with explicit output categories (unchanged/moved/modified/deleted/file_missing). It also distinguishes itself from sibling search tools by referencing 'prior search-family tool' and targeting post-retrieval verification, making its specific verb+resource purpose unambiguous.

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

Usage Guidelines4/5

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

The description explicitly says 'Use this to prevent hallucinated citations after code changes', giving a clear when-to-use context. It implicitly distinguishes from search tools by stating it operates on prior evidence, but does not explicitly mention when not to use or name alternative tools. Still, the guidance is concrete enough for an agent to decide.

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

wakeupA

500-token codebase summary suitable for pasting into a system prompt when the agent has no MCP access. Use this when integrating sverklo intelligence into Cursor, Codex, or a CI bot that can't run the MCP server. For MCP-connected agents, prefer status and the richer per-tool surfaces — they return more and stay in budget.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoOutput format (default: markdown)
max_tokensNoApproximate max tokens (default: 500 — intentionally small for system-prompt use)

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations provided, the description carries the burden of disclosing behavior. It clearly explains the output (a summary), its size (500 tokens), and its intended use case. It implies a read-only operation, though it does not explicitly state whether it modifies anything or require permissions. The context about 'they return more and stay in budget' adds useful behavioral nuance.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the core purpose, and every word earns its place. It provides key facts about the output size and when to use it without any fluff or repetition of the schema.

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

Completeness5/5

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

The tool is simple: two optional parameters, no output schema, no nested objects. The description fully covers its purpose, use case, and alternatives, making it self-sufficient for an agent to decide when and how to use it.

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

Parameters3/5

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

The input schema covers 100% of the parameters with descriptive text. The description adds no new parameter semantics beyond what the schema already provides; the mention of '500-token' and 'intentionally small for system-prompt use' echoes the default value for max_tokens. Thus, the schema does the heavy lifting, and the description contributes minimal additional meaning.

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

Purpose5/5

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

The description clearly states the tool generates a '500-token codebase summary' for pasting into system prompts, providing a specific action (generate summary) and resource (codebase). It also differentiates from sibling tools by explicitly directing MCP-connected agents to prefer 'status and the richer per-tool surfaces.'

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

Usage Guidelines5/5

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

Explicitly states when to use ('when integrating sverklo intelligence into Cursor, Codex, or a CI bot that can't run the MCP server') and when not to use ('For MCP-connected agents, prefer status and the richer per-tool surfaces'). This gives clear alternatives and exclusions.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 26 tool updatesv0.29.5
    • Addedask
    • Addedast_grep
    • Addedaudit
    • Addedclusters
    • Addedconcepts
    • Addedcontext
    • Addedctx_grep
    • Addedctx_stats
    • Addeddemote
    • Addeddeps
    • Addeddiff_search
    • Addedforget
    • Addedimpact
    • Addedinvestigate
    • Addedmemories
    • Addedoverview
    • Addedpatterns
    • Addedpin
    • Addedpromote
    • Addedreview_diff
    • Addedsearch
    • Addedsearch_iterative
    • Addedtest_map
    • Addedunpin
    • Addedverify
    • Addedwakeup
  2. 26 tool updatesv0.29.3
    • Removedask
    • Removedast_grep
    • Removedaudit
    • Removedclusters
    • Removedconcepts
    • Removedcontext
    • Removedctx_grep
    • Removedctx_stats
    • Removeddemote
    • Removeddeps
    • Removeddiff_search
    • Removedforget
    • Removedimpact
    • Removedinvestigate
    • Removedmemories
    • Removedoverview
    • Removedpatterns
    • Removedpin
    • Removedpromote
    • Removedreview_diff
    • Removedsearch
    • Removedsearch_iterative
    • Removedtest_map
    • Removedunpin
    • Removedverify
    • Removedwakeup
  3. 36 tool updatesv0.29.2
    • First observedask
    • First observedast_grep
    • First observedaudit
    • First observedclusters
    • First observedconcepts
    • First observedcontext
    • First observedcritique
    • First observedctx_grep
    • First observedctx_peek
    • First observedctx_slice
    • First observedctx_stats
    • First observeddemote
    • First observeddeps
    • First observeddiff_search
    • First observedforget
    • First observedgrep_results
    • First observedhead_results
    • First observedimpact
    • First observedinvestigate
    • First observedlookup
    • First observedmemories
    • First observedoverview
    • First observedpatterns
    • First observedpin
    • First observedpromote
    • First observedrecall
    • First observedrefs
    • First observedremember
    • First observedreview_diff
    • First observedsearch
    • First observedsearch_iterative
    • First observedstatus
    • First observedtest_map
    • First observedunpin
    • First observedverify
    • First observedwakeup

TDQS

A3.6/5.0

Scored across 36 tools

Disambiguation4/5

Most tools have clearly distinct purposes with detailed descriptions and 'use this instead of X' guidance, e.g. search vs investigate vs search_iterative vs ask. However, the high number of search-variant tools (search, investigate, search_iterative, ask, concepts, diff_search) can still cause misselection if the agent doesn't read the usage notes carefully.

Naming Consistency3/5

All names use lowercase snake_case, and there is a consistent ctx_* family. But the overall naming convention is mixed: some tools are verbs (remember, forget, search), some nouns (overview, refs, audit), and some compound nouns (review_diff, test_map, ast_grep). No uniform verb_noun pattern exists, making it harder to predict tool names.

Tool Count2/5

36 tools is well beyond the typical well-scoped range. While the server covers a wide feature set, the sheer number makes tool discovery and selection costly for an agent, and many tools are narrow utilities (ctx_peek, grep_results, head_results) that add surface area without adding fundamental capabilities.

Completeness5/5

The tool surface is remarkably complete for a code intelligence server: it covers codebase exploration (search, lookup, refs, deps, overview, clusters), memory lifecycle (remember, recall, forget, promote, demote, pin), context bundling (context, review_diff), diff review (diff_search, test_map), answer verification (verify, critique), and post-processing (grep_results, ctx_*). No obvious gaps for its stated purpose.

Maintenance

ActivitySlowing
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Local-first code intelligence and safety layer for AI coding agents. MCP server exposes dependency graph, impact analysis, and AST-compressed repo context, backed by typed local memory, patch-scope safety gates, and git-independent transaction rollback.
    1
    MIT