Sverklo
Sverklo is a local-first, open-source code intelligence MCP server that gives AI coding agents deep repo memory and semantic understanding through 37 specialized tools. It supports 12 programming languages and auto-integrates with agents like Claude Code, Cursor, Windsurf, and VS Code.
Search & Discovery
search— Hybrid BM25 + vector + PageRank search without knowing exact stringssearch_iterative/investigate— Multi-hop and fan-out parallel search with RRF fusionask— Natural-language router exercising the full stack in one calllookup— Find any function, class, or type by name (with typo tolerance)refs— All usages of a symbol with dead-code flaggingoverview— Structural codebase map ranked by dependency importanceconcepts/patterns/clusters— LLM-labeled subsystems, design-pattern annotations, and module detection via graph communitiesast_grep— Structural AST pattern matching (e.g. everycatch (e) { return null })wakeup— 500-token codebase summary for when MCP isn't available
Impact & Refactoring
impact— Transitive caller graph (true blast radius before refactoring)deps— File-level import/export dependency graphaudit— One-call health report: god nodes, dead code, circular deps, security smells, A–F grade
Code Review
review_diff— Risk-scored diff review (touched-symbol importance × coverage × churn)diff_search— Semantic search scoped to changed files onlytest_map— Map a git diff to test coverage; flag untested changescritique— Coverage check for an agent's answer; flags missed hubs and stale citationsverify— Confirm cited evidence still matches current code at the current SHA
Bi-temporal, Git-aware Memory
remember/recall/forget— Save, search, and delete decisions/patterns pinned to git SHAspromote/demote— Move memories between auto-injected core tier and archivepin/unpin— Attach memories to file paths or symbol names for automatic surfacingmemories— List all memories with health metrics and conflict detection
Post-filter Primitives (refine previous results without re-querying)
grep_results,head_results,ctx_peek,ctx_slice,ctx_grep,ctx_stats
Index Health & CLI
status— Index health: file counts, languages, memory summary, tool recommendationsCLI tools for running audits, reviews, and prompts;
sverklo audit-diffworks as a pre-commit hook to prevent new circular deps or fan-in spikes
Privacy: All indexing, embedding, and storage happen on-device by default using bundled models and an embedded SQLite database — no data leaves your machine unless you explicitly configure a remote embedding provider.
Integrates with JetBrains IDEs via MCP to give coding agents repo context like symbol relationships and decision history.
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 initsverklo 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
If
sverklo provesurfaces 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.


▶ Watch the 90-second demo on YouTube —
sverklo init→audit→ 37 MCP tools → live Claude Code integration with blast-radius and symbol-graph traversal.

2026-05-04 — v0.20.2: parser brace-counter + lookup exact-match fixes. Lodash P1 0/10 → 9/10. Overall F1 0.45 → 0.56 (now leader on the public bench). release notes
2026-05-04 — Bench expanded to 3 datasets, 5 baselines, 90 tasks. Lodash 4.17.21 added per #26. sv-p5 ground truth refined per #27.
2026-05-03 — v0.20.1:
sverklo receiptships — token-spend summary parsed from~/.claude/projects/**/*.jsonl. why we built it2026-05-02 — Bench-as-feedback-loop story: 5-baseline expansion exposes blind spots on both sides of the bench. issue #25
2026-05-01 — MCP STDIO command-injection audit: the class Anthropic won't patch, and the 30-second audit any maintainer can run.
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 initThat'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-v2ONNX, ~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 tosrc/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, andusingdirectives. Addstree-sitter-c-sharp@0.23.5WASM 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 whereimport type { X } from 'y'was missed.AGENTS.md aware
sverklo init. When AGENTS.md exists, the prefer-sverklo block is appended there instead ofCLAUDE.md.sverklo doctorflags drift between the two files so multi-agent setups stay in sync.Windows pathing fixed.
sverklo initandsverklo doctornow work on Windows — absolute paths go throughpath.basename()and storedrelativePathis 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-sitterroutes 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/searchplusremember scope:"workspace"from the agent — write a decision once, query it from every other repo in the workspace.recallblends 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 newinline-comments: truedefault posts per-line review comments viapulls.createReview, alongside the existing sticky summary.VS Code extension scaffold at
extensions/vscode/with a pre-builtsverklo-vscode-0.1.0.vsix. Inline caller-count decorations on every function header (⟵ 47 callers). Marketplace publish workflow ships dormant; install withcode --install-extension extensions/vscode/sverklo-vscode-0.1.0.vsixtoday.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 oncdfor 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?" |
|
|
"Can I safely rename |
|
|
"Is this helper actually used anywhere?" |
|
|
"What's load-bearing in this codebase?" |
|
|
"Review this 40-file PR — what should I read first?" | Read them in the order git diff printed them |
|
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 |
|
Cursor | yes | — | — |
|
Windsurf | yes | — | — |
|
Zed | yes | — | — |
|
VS Code | yes | — | — | manual |
JetBrains | yes | — | — | manual |
Antigravity | yes | — | — |
|
Codex CLI | yes | — | — |
|
GitHub Copilot CLI | yes | — | — |
|
Any MCP client | yes | — | — |
|
Hero tools
Tool | What it does |
| Hybrid BM25 + vector + PageRank search. Find code without knowing the literal string. |
| All references to a symbol, with caller context. Flags likely dead-code candidates from the current reference graph. |
| Walk the symbol graph, return ranked transitive callers — the real blast radius. |
| Risk-scored review of |
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 .passWire 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-commitHusky 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 |
| Hybrid BM25 + ONNX vector + PageRank, fused with Reciprocal Rank Fusion |
| Wider candidate pool with refinement hints between rounds |
| Parallel multi-channel fan-out (FTS / vector / path / symbol) with per-channel RRF |
| Natural-language router — concepts + investigate + refs in one call |
| Structural codebase map ranked by PageRank importance |
| Find any function, class, or type by name (typo-tolerant) |
| One-call onboarding — combines overview, code, and saved memories |
| Structural pattern matching across the AST, not just text |
| Browse the LLM-derived concept index (themes across the codebase) |
| Semantic clusters of related symbols, computed offline |
| Query symbols tagged with a design pattern (observer, repository, validator, ...) |
Impact — refactor without the regression
Tool | What |
| Walk the symbol graph, return ranked transitive callers (the real blast radius) |
| Find all references to a symbol, with caller context |
| File dependency graph — both directions, importers and imports |
| 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 |
| Risk-scored review of |
| Second-pass critique of a review — what did the first read miss |
| Which tests cover which changed symbols; flag untested production changes |
| Semantic search restricted to the changed surface of a diff |
| Verify a quoted code span is still present at the cited SHA — citation gate |
Memory — bi-temporal, git-aware, never stale
Tool | What |
| Save decisions, patterns, invariants — pinned to the current git SHA |
| Semantic search over saved memories with staleness detection |
| List all memories with health metrics (still valid / stale / orphaned) |
| Delete a memory |
| Move memories between tiers (core / archive) |
| 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 inside the previous result block instead of re-running the search |
| Take the first N hits from the previous response |
| Peek at a referenced span by its handle without expanding it fully |
| Slice a stored response by line range |
| Grep within a stored context window |
| Token-budget stats for stored response handles |
Index health
Tool | What |
| Index health check, file counts, last update |
| 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+Readis hard to beatBuild and test verification — only
Bashrunsnpm 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
└────────────────────────┘Parse your codebase into functions, classes, types (TS, JS, Vue, Python, Go, Rust, Java, C, C++, Ruby, PHP, C#)
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
Graph dependencies and compute PageRank (structurally important files rank higher)
Retrieve via channelized RRF — per-channel rank fusion with channel-specific weights, the architectural choice that closes the private-helper-function recall gap
Remember decisions across sessions, pinned to git SHAs (bi-temporal memory)
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 |
99 | 10 s | 12 ms | 0.75 ms | 4 MB | |
1,709 | 22 s | 14 ms | 0.88 ms | 11 MB | |
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.
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 required — npx 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 initStart 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.jsonat project root + appends toCLAUDE.md(orAGENTS.mdif present)Cursor:
.cursor/mcp.jsonWindsurf:
~/.windsurf/mcp.jsonVS Code:
.vscode/mcp.jsonJetBrains: Settings → Tools → MCP Servers
Antigravity:
~/.gemini/antigravity/mcp_config.json(global; re-runsverklo initper 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 directoryUse 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:quickOutput 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..gitlinkfile: nothing special needed. Sverklo shells out togitwithcwd: rootPath; git CLI handles the worktree linkfile transparently.MCP config: keep
args: ["."]from the worktree root (the defaultsverklo initwrites). 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/projectNo 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-marketplaceInstalls 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 |
no (cloud) | no | yes | partial | no | no | proprietary | with Cursor sub | |
no (cloud) | no | yes | yes | no | partial | source-available | $9-19/dev/mo | |
no (Milvus) | yes | vector only | no | no | no | MIT | $0 + Milvus | |
yes | yes | no | basic | no | no | Apache 2.0 | $0 | |
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 gatesSix 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.
Links
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 toolsaskA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | fast (default): one investigate pass + concept lookup. thorough: also expand-graph + a refs probe on top symbols. | |
| query | Yes | Natural-language question. | |
| scope | No | Optional path prefix. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Default: project root | |
| pattern | Yes | e.g. 'console.log($A)' | |
| language | No | typescript, python, rust, go, … |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| token_budget | No | Max tokens to return (default: 4000) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| min_size | No | Minimum cluster size to show (default 3) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max concepts to return (default 5). | |
| query | Yes | Natural-language question: 'where does caching live?', 'show me the auth subsystem', etc. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| task | No | Free-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. | |
| scope | No | Optional path prefix to constrain the search (e.g. 'src/api/'). | |
| budget | No | When 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). | |
| exclude | No | Path substrings to exclude from the repo map (e.g. ['test', 'migration']). | |
| detail_level | No | How much to return. minimal=fast/cheap (good for snap orientation); normal=balanced (default); full=adds dependency neighbours. Ignored when `budget` is set. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| claim | No | Optional summary of the agent's claim. Echoed in the critique header. | |
| symbols | No | Symbols the agent discussed by name. Used for hub / doc-coverage checks. | |
| evidence_ids | Yes | Evidence ids (from the fenced evidence blocks) that the agent cited. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| uri | Yes | ||
| head | No | Optional cap on returned blocks. | |
| pattern | Yes | Regex (or literal if regex is invalid). |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| len | Yes | Byte length to return. | |
| offset | Yes | Byte offset into the block body. | |
| hit_index | Yes | 0-based index into the block list. | |
| response_id | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| uri | Yes | ctx://<tool>/<id> URI | |
| length | No | Byte length (default 4000) | |
| offset | No | Byte offset (default 0) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses that the tool returns '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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| uri | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Memory ID to demote |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | File path to analyze | |
| depth | No | How many levels deep to traverse (default: 1) | |
| direction | No | Direction of dependencies (default: both) | |
| token_budget | No | Max tokens to return (default: 1500) |
TDQS
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.
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.
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.
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.
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.
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.
diff_searchA
Semantic search scoped to files in a git diff (and optionally their dependency closure). Use this when reviewing an MR/PR and you need to find code related to a query — but only within the changed files, not the entire codebase. Cuts noise from global search and lets you ask questions like 'find all lock acquisitions in the changed files' or 'where do these new functions get called from existing code'.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | Git ref or range. Default: main..HEAD | |
| type | No | Filter by symbol type | |
| query | Yes | Natural language query or code pattern | |
| token_budget | No | Max tokens to return. Default: 3000. | |
| include_callers | No | Also include files that import the changed files, N hops out. Default: 0 (only changed files). Use 1 to include direct callers, 2 for transitive. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of explaining behavior. It discloses the scoped search behavior, optional dependency closure, and noise-reduction intent. However, it does not mention output format or potential limitations, which keeps it from being fully transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the core definition, followed by usage context and concrete examples. Every sentence contributes value, with no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 5 parameters, no output schema, and no annotations, so the description needs to cover return behavior and limitations. It explains scope and use case well, but omits what the results look like and any edge-case constraints, making it adequate but incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds meaningful context beyond the schema by clarifying that 'dependency closure' relates to include_callers and by giving example queries that illustrate the query parameter's intended use.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: 'Semantic search scoped to files in a git diff (and optionally their dependency closure).' It clearly distinguishes itself from global search by emphasizing 'only within the changed files, not the entire codebase' and provides concrete example queries, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use the tool: 'Use this when reviewing an MR/PR and you need to find code related to a query — but only within the changed files.' This gives clear context and implies the alternative of global search, but it does not explicitly name sibling tools or provide precise when-not-to-use conditions.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Memory ID to delete (from recall results) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It 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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| pattern | Yes | Regex (or literal if regex is invalid). | |
| response_id | Yes | The rsp_... id from an earlier call. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| n | Yes | Max blocks to keep. | |
| response_id | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max references to return (default 50) | |
| symbol | Yes | The function/class/type name to find references for | |
| cross_repo | No | Include cross-repo impact from workspace projects (default false) | |
| partition_threshold | No | When 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
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| repo | No | Optional: 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. | |
| query | Yes | Natural-language question or exploration target. | |
| scope | No | Optional path prefix to limit all retrievers to, e.g. 'src/api/'. | |
| budget | No | Max candidates per sub-retriever (default 50). Higher = broader fusion at some latency cost. | |
| max_hits | No | Max hits to display in the response (default 10). | |
| expand_graph | No | Run 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
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| repo | No | Optional: 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. | |
| type | No | Filter by symbol type | |
| symbol | Yes | Symbol name to look up (exact or prefix match) | |
| token_budget | No | Max tokens to return (default: 2000) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | list (default): show active memories. conflicts: pairs of active memories sharing a pin that may contradict (decision/preference/pattern categories only). | |
| limit | No | Max memories (list mode) or conflict pairs (conflicts mode) to return (default: 50 / 25) | |
| category | No | Filter by category in list mode (default: 'any') | |
| stale_only | No | List mode: only show stale memories (default: false) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Directory to overview (default: project root) | |
| depth | No | Progressive 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_budget | No | Max tokens to return (default: 3000) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It 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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max rows to return (default 25). | |
| pattern | No | One 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
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | File path or symbol name to pin the memory to | |
| memory_id | Yes | Memory ID to pin (from recall/memories results) |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Memory ID to promote (from recall/memories results) |
TDQS
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.
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.
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.
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.
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.
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'.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Cognitive-axis filter (default: 'any'). episodic = moment-bound events, semantic = timeless facts/rules, procedural = how-tos. Orthogonal to category. | |
| mode | No | Which memory tier to search. 'core' = always-on invariants only, 'archival' = searchable long tail, 'all' = both (default). | |
| limit | No | Max memories to return (default: 10) | |
| query | No | What to search for in memories (optional when mode=core) | |
| category | No | Filter by category (default: 'any') | |
| include_stale | No | Include stale memories (default: false) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| exact | No | When true (default), match on whole-identifier boundaries — `embed` won't match `embeddingStore`. When false, substring-match like the old behavior. | |
| symbol | Yes | Symbol name to find references for | |
| token_budget | No | Max tokens to return (default: 2000) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Cognitive-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). | |
| tags | No | Optional tags | |
| tier | No | core auto-injects each session, archive is searched on demand | |
| scope | No | project (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. | |
| content | Yes | The memory to save | |
| category | No | Default: 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. | |
| confidence | No | 0.0-1.0, default 1.0 | |
| related_files | No | Files this memory relates to (enables staleness detection) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | Git ref or range. Examples: 'HEAD' (uncommitted + last commit), 'main..HEAD' (branch vs main), 'abc123..def456'. Default: main..HEAD. | |
| max_files | No | Cap on number of files to analyze. Default: 25. | |
| token_budget | No | Max tokens to return. Default: 4000. | |
| include_added_similarity | No | Detect duplicates among added symbols. Default: true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the 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.
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.
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.
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.
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.
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.
searchA
Hybrid semantic + text search with PageRank ranking. WORKS WELL for: exploratory questions where you don't know the exact symbol ('how does auth work', 'find anything related to billing', 'where's the retry logic'), anti-pattern discovery ('swallowed exceptions', 'silent null returns'), and cross-file semantic matches. STRUGGLES WITH: framework registration and wiring questions ('how is X registered as a bean', 'where is this interceptor configured'). For those, grep the specific annotation (@Component, @Configuration, etc.) directly. Response includes a confidence signal and a fallback hint when the query shape is one we know semantic search handles poorly.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | refs returns hits without bodies (file:line + score + name) — same latency as full, ~half the payload tokens. full (default) returns the same hits with their bodies. Borrowed from iwe-org/iwe's find/retrieve split; use refs when you only need to triage the hit list and intend to follow up with ctx_slice on a specific hit. | |
| repo | No | Optional: name of a registered repo to search (see list_repos). Defaults to the current workspace. Use this to query a sibling project that has been sverklo-init'd but isn't the current cwd — avoids falling back to grep. | |
| type | No | Filter by symbol type (default: any) | |
| query | Yes | Natural language query or code pattern | |
| scope | No | Limit to path prefix, e.g. 'src/api/' | |
| format | No | compact (default) elides long bodies, dedups similar chunks, and groups 3+ results from the same directory into a hub+count. full returns every match with complete bodies — use when the agent needs to see everything. | |
| language | No | Filter by language, e.g. 'typescript' | |
| current_file | No | Optional: repo-relative path of the file the user is currently editing. When provided, results closer to this file (in directory distance) get a small ranking boost — useful for breaking ties between equally-relevant candidates. | |
| token_budget | No | Max tokens to return (default: 4000) | |
| bundle_tokens | No | When > 0, attaches up to this many extra tokens of context to the response: adjacent chunks in the same file + 1-hop import-graph neighbors. Useful for onboarding or 'show me more' flows; defaults to 0 (off). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the hybrid search mechanism, PageRank ranking, confidence signal, fallback hint behavior, and the mode/format options' payload tradeoffs. It doesn't mention auth, rate limits, or side effects, but for a search tool these are less critical. The description adds substantial behavioral context beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, then uses clear WORKS WELL/STRUGGLES WITH sections for guidance, and ends with a note about the confidence signal. It's slightly long but every sentence earns its place. The structure is scannable with clear section markers.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (10 params, 3 enums, no output schema), the description covers the key decision points: when to use vs alternatives, mode/format tradeoffs, repo scoping, and the confidence/fallback behavior. It doesn't describe the return format in detail, but the schema covers parameter semantics and the description covers the behavioral aspects. Slightly more detail on the confidence signal's format would push it to 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by explaining the mode parameter's payload tradeoff ('refs returns hits without bodies... ~half the payload tokens'), the repo parameter's purpose ('query a sibling project... avoids falling back to grep'), and the current_file ranking boost. It also explains format's hub+count grouping. This goes beyond the schema's terse descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool performs hybrid semantic + text search with PageRank ranking, and explicitly distinguishes it from siblings by listing what it works well for (exploratory questions, anti-pattern discovery, cross-file semantic matches) and what it struggles with (framework registration/wiring questions, for which it recommends grep). This is a specific verb+resource with clear differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance: 'WORKS WELL for' exploratory questions, anti-pattern discovery, and cross-file semantic matches; 'STRUGGLES WITH' framework registration/wiring questions, and explicitly recommends an alternative ('For those, grep the specific annotation...'). This is exemplary usage guidance.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| pool | No | Candidate pool size (default 200). Capped at 500. | |
| repo | No | Optional: 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. | |
| query | Yes | ||
| scope | No | Optional path prefix. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | Git ref or range. Default: main..HEAD | |
| include_importers | No | Also surface test files that import the changed file via the dependency graph (not just name matches). Default: true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the 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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | File path or symbol name to unpin from | |
| memory_id | Yes | Memory ID to unpin |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It 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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| claim | No | Optional human-readable claim the ids support. Echoed back in the header — useful for audit logs. | |
| evidence_ids | Yes | List of ev_xxxxxx ids to verify. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Output format (default: markdown) | |
| max_tokens | No | Approximate max tokens (default: 500 — intentionally small for system-prompt use) |
TDQS
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.
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.
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.
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.
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.
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.
26 tool updates
v0.29.5- Added
ask - Added
ast_grep - Added
audit - Added
clusters - Added
concepts - Added
context - Added
ctx_grep - Added
ctx_stats - Added
demote - Added
deps - Added
diff_search - Added
forget - Added
impact - Added
investigate - Added
memories - Added
overview - Added
patterns - Added
pin - Added
promote - Added
review_diff - Added
search - Added
search_iterative - Added
test_map - Added
unpin - Added
verify - Added
wakeup
26 tool updates
v0.29.3- Removed
ask - Removed
ast_grep - Removed
audit - Removed
clusters - Removed
concepts - Removed
context - Removed
ctx_grep - Removed
ctx_stats - Removed
demote - Removed
deps - Removed
diff_search - Removed
forget - Removed
impact - Removed
investigate - Removed
memories - Removed
overview - Removed
patterns - Removed
pin - Removed
promote - Removed
review_diff - Removed
search - Removed
search_iterative - Removed
test_map - Removed
unpin - Removed
verify - Removed
wakeup
36 tool updates
v0.29.2- First observed
ask - First observed
ast_grep - First observed
audit - First observed
clusters - First observed
concepts - First observed
context - First observed
critique - First observed
ctx_grep - First observed
ctx_peek - First observed
ctx_slice - First observed
ctx_stats - First observed
demote - First observed
deps - First observed
diff_search - First observed
forget - First observed
grep_results - First observed
head_results - First observed
impact - First observed
investigate - First observed
lookup - First observed
memories - First observed
overview - First observed
patterns - First observed
pin - First observed
promote - First observed
recall - First observed
refs - First observed
remember - First observed
review_diff - First observed
search - First observed
search_iterative - First observed
status - First observed
test_map - First observed
unpin - First observed
verify - First observed
wakeup
TDQS
Scored across 36 tools
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.
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.
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.
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
Related MCP Connectors
Enterprise code intelligence for M&A, security audits, and tech debt. Hosted server with 200k free.
AI-native git hosting — repos, PRs, issues, CI gates, and AI code review over MCP (60 tools).
Deterministic context layer for your codebase: change impact, blast radius, answers with receipts.
Codebase graphs, caller impact analysis, and recorded project context for AI coding agents.
Related MCP Servers
- AlicenseAqualityBmaintenanceUnified MCP server: hybrid search + code graph + semantic memory. 10 tools, <350MB RAM, fully local. No API keys.10PolyForm Noncommercial 1.0.0
- AlicenseNot gradedqualityCmaintenanceLocal-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.1MIT
- AlicenseNot gradedqualityBmaintenancePrivate, local-first code intelligence MCP server that builds a static graph of repositories and exposes search, architecture, impact analysis, and review tools via MCP.MIT

Vibgrate AI Contextofficial
AlicenseNot gradedqualityBmaintenanceLocal-first MCP server that gives AI assistants codebase intelligence—code graph, drift analysis, vulnerability attribution, and version-correct library docs—all from the user's machine.1,569 npm4Apache 2.0