Skip to main content
Glama

CogniRepo

mcp-name: io.github.ashlesh-t/cognirepo

Persistent memory and context for any AI tool. Not a chatbot — infrastructure.

CI Security PyPI version GitHub Stars License: MIT Python 3.11+ Discord

alt text


lookup_symbol returns file:line very quickly — grep takes 2–8 seconds. On Python repos ≥ 15K LOC, CogniRepo cuts AI coding agent token usage by 50–80% compared to raw file reads — benchmarked on Flask, FastAPI, Celery, and Ansible (1,800+ files). Works with Claude Code, Cursor, and Gemini CLI. Fully offline. No API keys required for indexing or any of the 35 MCP tools.


What it does

Every AI conversation starts from zero. Claude, Cursor, Gemini — none of them remember what you fixed yesterday, which files relate to which features, or what decisions were made last sprint. CogniRepo fixes that.

It sits between your codebase and any AI tool, providing:

  • Semantic memory — FAISS vector store with sentence-transformer embeddings. Store decisions, docs, architecture notes. Retrieve them with natural language.

  • Episodic log — append-only event journal. Know what happened before that error.

  • Knowledge graph — NetworkX DiGraph linking functions, classes, files, imports, inheritance chains, call relationships, and concepts. All queryable.

  • AST reverse index — O(1) symbol lookup across your entire codebase in any supported language.

  • User behavior profiling — tracks how you prompt so Claude adapts its response style without you having to re-explain preferences every session.

  • Error tracking — records errors with prevention hints so Claude avoids repeating the same mistake across sessions.

  • Session history — persists conversation exchanges so any session can resume where the last one ended.

  • Architectural summaries — auto-generated on first init; built entirely from the local AST index (no API key needed). File → directory → repo summary tree, embedded into FAISS for semantic search.

  • Multi-model orchestration — classify query complexity → build context → route to the right model. Claude for deep reasoning, Gemini Flash for quick lookups. All automatic.

Every AI tool that connects gets the same accumulated project knowledge. Memory persists across sessions, across tools, across time.


Related MCP server: my-memory-mcp

When to use CogniRepo

Most effective on codebases ≥ 15K LOC. On small repos (< 10K LOC), native file reads are fast enough that the MCP tool schema overhead (~4,100 tokens for 34 tools) takes more than you save. Break-even is roughly 4 tool calls on a medium-sized repo.

CogniRepo vs. claude-context / similar tools:

Feature

CogniRepo

claude-context / similar

Pure code retrieval

✓ (FAISS + graph + AST)

✓ Often faster on first use

Episodic memory (what happened last sprint)

✓ Persistent BM25 + vector

Cross-agent handoff (Claude → Gemini → Cursor)

last_context.json shared

User behaviour profile (adapts depth/style)

get_user_profile()

Error pattern avoidance (learns from past fails)

record_error()

Architectural decision records

record_decision()

Multi-repo org graph (microservices)

CHILD_OF / CALLS_API edges

Conclusion: prefer CogniRepo when you value institutional memory across sessions. Use simpler tools when you just need one-shot code retrieval on a small codebase.


Why it helps — measured numbers

Benchmarked across 6 real open-source repos (FastAPI, Flask, Celery, Ansible, Moby/Docker, Kubernetes) using 30 structured prompts tested against Claude, Gemini, and Cursor/Codex.

Metric

Value

Notes

Token reduction — Python repos

50–84%

FastAPI FA-2: 12 000 → 2 500 · FA-4: 2 000 → 450 · FL-4: 8 000 → 1 250

Token reduction — average (all tested)

~60%

Across FA/FL/CE/AN where both baselines were captured

Token reduction — complex dynamic codebases

20–35%

Celery CE-4/CE-5; deep async/dynamic-dispatch patterns reduce gains

Symbol lookup latency

< 1 ms

vs. grep at 2–8 s on large repos

Accuracy vs. baseline

equal or better in 100% of tests

No regression observed; FA-2 accuracy improved Moderate → High

Cross-agent context handoff

✅ validated

CE-4: Claude primed index, Gemini CLI consumed it — 35% token saving, same accuracy

Dynamic dispatch coverage

honest gap

CE-3 (APScheduler beat dispatch) returned NA for both; CogniRepo does not fabricate call chains

Go/multi-language coverage

partial

Moby MO-2 showed 67% savings; MO-3-5 / K8-* incomplete pending Go grammar improvements

Honest limits: CogniRepo adds the most value on Python repos with clear static structure. Dynamic dispatch patterns (Celery beat, plugin registries), deep Go codebases, and Ansible's 22-level variable precedence chains reduce retrieval confidence. The tool reports uncertainty rather than hallucinating call chains.

Measured: lookup latency and token reduction (4 external repos)

Indexed 4 real repos, measured with cognirepo index-repo + cognirepo benchmark --json. CPU-only, no GPU.

Repo

Files

Lookup latency

Token reduction

context_relevance

flask

83

0.005 ms

97.7%

21.8%

fastapi

1,122

0.002 ms

98.6%

36.0%

celery

416

0.003 ms

99.1%

39.8%

ansible

1,813

0.018 ms

Lookup latency < 0.1 ms on all repos. Precision@k re-validated after v1.1.3 benchmark fix — see docs/METRICS.md for full numbers and methodology.

Run cognirepo benchmark on your own codebase to reproduce. See docs/METRICS.md.


How it works

alt text


Quick start

Requirements

  • Python 3.11+

  • API key (optional — only needed for cognirepo ask): ANTHROPIC_API_KEY, GEMINI_API_KEY, OPENAI_API_KEY, or GROK_API_KEY. Indexing, memory, summarization, and all MCP tools work fully offline.

Install

pipx install cognirepo

That's it. cognirepo setup handles the rest — it installs optional extras (languages, security, providers) via pipx inject automatically when you enable them in the wizard.

Why pipx? It creates an isolated venv for cognirepo automatically so fastembed and all deps install cleanly. The cognirepo command is then globally available in every directory — no per-repo venv needed.

Arch Linux / Debian 12+ / Ubuntu 24.04+: Do NOT pip install into system Python. These distros enforce PEP 668 and block system-wide pip installs. Use pipx.

Install pipx first (if needed)

# Arch Linux
sudo pacman -S python-pipx

# Debian / Ubuntu
sudo apt install pipx

# macOS
brew install pipx

# Any platform (fallback)
pip install pipx --user

Inside a virtual environment (alternative)

python -m venv .venv && source .venv/bin/activate
pip install cognirepo
# extras are installed by the setup wizard automatically

Development install (from source)

pipx install -e '.[dev,security,languages]'
# or inside a venv: pip install -e '.[dev,security,languages]'

Note: CPU-only embeddings are the default (fastembed/ONNX, no PyTorch/CUDA required). For GPU: pipx inject cognirepo 'cognirepo[gpu]' then install torch separately.

Run

# One-command onboarding (init + index + auto-configure MCP for Claude/Cursor/VS Code):
cognirepo setup

# Or step by step:
cognirepo init --no-index     # scaffold .cognirepo/
cognirepo index-repo .        # index your codebase (required before MCP tools work)
cognirepo index-repo . --daemon  # index and run watcher in background

# Check everything is working:
cognirepo status                        # shows symbol count, graph nodes, signal warmth
cognirepo doctor                        # full health check

# Query through multi-model orchestrator:
cognirepo ask "why is auth slow?"

# Manage background watchers:
cognirepo list                          # show all running watcher daemons
cognirepo list -n <PID> --view          # tail the log of a specific watcher
cognirepo list -n <PID> --stop          # stop a watcher

First-time setup: cognirepo init + cognirepo index-repo . must complete before MCP tools (context_pack, lookup_symbol, who_calls, etc.) return data.


Connect your AI tools

Run cognirepo init inside your project — it asks if you want to configure Claude and automatically writes .claude/CLAUDE.md and .claude/settings.json with the correct project-locked connector.

Each project gets its own isolated connector named cognirepo-<project>:

{
  "mcpServers": {
    "cognirepo-myproject": {
      "command": "cognirepo",
      "args": ["serve", "--project-dir", "/abs/path/to/myproject"],
      "env": {}
    }
  }
}

The --project-dir flag locks the MCP server to that project's .cognirepo/ directory. When Claude has multiple projects open simultaneously, each connector reads only its own memories — never mixing data across projects or teams.

Cursor / Copilot

cognirepo export-spec
cp adapters/cursor_mcp_config.json .cursor/mcp.json
# Restart Cursor — CogniRepo tools appear in the tool selector

Docker

cp .env.example .env          # add your API keys
docker compose up mcp         # MCP stdio server

MCP Tools — complete reference

All 34 tools are available to Claude, Cursor, and any MCP-compatible client.

Core retrieval

Tool

Description

When to use

context_pack(query, max_tokens=2000)

Token-budget code + memory context

Every session — FIRST call before any file read

lookup_symbol(name)

O(1) symbol lookup → file + line

Before grepping for a function

who_calls(function_name)

Trace callers + dynamic dispatch fallback

Impact analysis, refactoring

search_token(word)

Word-level reverse index across names, docs, comments

Finding where a concept lives

retrieve_memory(query, top_k=5)

Semantic similarity search over stored memories

Before answering — pull past context

search_docs(query)

Full-text search in all .md files

Documentation lookups

semantic_search_code(query, language=None)

Vector search over code symbols only

Code-specific semantic queries

subgraph(entity, depth=2)

Local knowledge graph neighbourhood

Understand symbol relationships

graph_stats()

Node/edge count and graph health

Check if graph has data

episodic_search(query, limit=10)

BM25 keyword search in event history

Find past decisions or incidents

dependency_graph(module, direction="both")

Import/dependency relationships

Module coupling analysis

explain_change(target, since="7d")

What changed in a file/function + git cross-ref

Understanding recent changes

architecture_overview(scope="root")

Pre-computed LLM architectural summaries

Big-picture questions

User & session intelligence

Tool

Description

When to use

get_user_profile()

User's interaction style: depth pref, question types, vocabulary

Call at session start — calibrates Claude's response style

get_session_history(limit=10)

Recent conversation exchanges across sessions

Resuming context from prior sessions

record_user_preference(key, value, context="")

Store a style or format preference

When user corrects interpretation or states a preference

Error tracking & prevention

Tool

Description

When to use

get_error_patterns(min_count=1)

Recurring errors with prevention hints

Before proposing a fix — check if it has failed before

record_error(error_type, message, file_path, query_context)

Log an error for future avoidance

After any error Claude or user encounters

Session start

Tool

Description

When to use

get_agent_bootstrap()

Single-call session start: brief + last context + profile + errors (~300 tokens vs ~900)

Preferred first call — replaces the 4-call sequence

get_session_brief()

Architecture + hot symbols + index health

First call when you need granular parts separately

get_last_context()

Most recent context_pack snapshot from prior session

Resume where previous agent left off

Memory & storage

Tool

Description

When to use

store_memory(text, source="")

Persist a memory to the FAISS index

After solving bugs, recording decisions

log_episode(event, metadata={})

Append event to episodic journal

Track milestones, incidents, deployments

record_decision(summary, rationale="")

Record architectural decision to episodic memory

When making non-obvious design choices

supersede_learning(old_memory_id, new_text)

Deprecate and replace an outdated memory in one call

When a past decision or fact has changed

Cross-repo (organization)

Tool

Description

When to use

org_search(query)

Search memories across all org repos

Multi-repo context queries

org_wide_search(query)

Search across every project in the org

Broadest cross-repo sweep

org_dependencies(depth=2)

Bidirectional inter-repo dependency graph

"What does this service depend on?"

cross_repo_search(query, scope="project")

Project-scoped or org-scoped search

Finding shared components

cross_repo_traverse(symbol, direction="both")

Traverse org graph from a repo or symbol

Tracing bugs across service boundaries

find_symbol_path(from_symbol, to_symbol)

Shortest call-graph path between two symbols, across services

Tracing a request flow end-to-end

get_service_endpoints(repo_path)

HTTP endpoint registry for a service

Listing a microservice's API surface

list_org_context()

Org metadata + sibling repos

Understanding repo relationships

link_repos(src_repo, dst_repo, relationship)

Record cross-repo dependency

When you discover one repo imports another


Knowledge graph — what gets indexed

The knowledge graph is significantly richer than a simple call graph.

Node types

Type

Description

FILE

Every indexed source file

FUNCTION

Function and method definitions with docstrings

CLASS

Class definitions with base classes

CONCEPT

Semantic concepts extracted from docstrings and identifiers

QUERY

Recorded query nodes (for retrieval scoring)

SESSION

Conversation session nodes

ERROR

Recurring error pattern nodes

MEMORY

Cross-agent memory nodes (synced from Claude/Gemini)

Edge types

Type

Direction

Description

DEFINED_IN

symbol → file

Symbol lives in this file

CALLS / CALLED_BY

bidirectional

Function call relationships with purpose labels

IMPORTS

file → file

Python import dependencies

INHERITS

class → parent

Inheritance hierarchy

CO_OCCURS

file ↔ file

Files edited together (behavioural co-edit signal)

RELATES_TO

concept → symbol

Semantic concept linkage

QUERIED_WITH

query → symbol

Retrieval tracking for scoring

IMPORTS and INHERITS edges are built automatically during index-repo from Python AST. Use subgraph("MyClass", depth=2) or dependency_graph("mymodule") to query them.


User behavior profiling

CogniRepo tracks how you interact across sessions and builds a profile that Claude uses to calibrate its responses — without you having to repeat preferences every session.

What gets tracked

  • Depth preference — inferred from average query length: concise / medium / detailed

  • Question types — distribution across: why, what, how, fix, explain, where, refactor, add

  • Domain vocabulary — top terms that appear frequently in your queries

  • Code focus — percentage of queries referencing code identifiers (symbols, functions)

  • Sample queries — last 3 queries for Claude to infer framing style

Accessing your profile

# MCP tool (Claude calls automatically at session start):
get_user_profile()

# CLI:
cognirepo user-prefs

Example profile output

{
  "depth_preference": "detailed",
  "top_question_type": "how",
  "question_type_distribution": {"how": 12, "why": 8, "fix": 5},
  "top_terminology": ["auth", "token", "session", "middleware", "validate"],
  "code_focus_percent": 73,
  "framing_hints": "prefers detailed responses; often asks 'how' questions; domain vocabulary: auth, token, session",
  "total_queries_tracked": 47
}

Claude receives framing_hints at session start and adjusts response length, code density, and terminology accordingly. The profile accumulates over time — more accurate the more you use it.


Error tracking & prevention

CogniRepo logs every error that occurs during sessions — whether it's a Python exception, a failed build step, or a tool call that went wrong. Errors are stored with:

  • Dedup signature — prevents the same error from inflating the count

  • Prevention hint — a targeted suggestion to avoid the same error class

  • Occurrence context — last 5 occurrences with file path and error message

  • Query context — the query or action that triggered the error

Logging errors

# MCP tool (Claude calls after errors):
record_error("TypeError", "expected str got int", "config/parser.py", "fix config loading")

Viewing error patterns

# MCP tool:
get_error_patterns()

Returns:

[
  {
    "error_type": "TypeError",
    "count": 7,
    "files": ["config/parser.py", "api/handlers.py"],
    "last_seen": "2026-04-22T10:30:00Z",
    "prevention_hint": "Wrong type — validate inputs at function boundary.",
    "recent_context": "expected str got int in parse_config"
  }
]

Built-in prevention hints

Error class

Prevention hint

NameError

Undefined variable — check imports and scope before use

ImportError

Import failed — verify package is installed and module path is correct

AttributeError

Object missing attribute — check type, None-guard, or spelling

TypeError

Wrong type — validate inputs at function boundary

KeyError

Missing dict key — use .get() with default or check existence first

IndexError

List out of range — guard with len() check before access

OSError

File/IO error — always guard file ops with try/except OSError

SyntaxError

Syntax error — run a linter before committing

Timeout

Timeout — add explicit timeout parameter and retry logic

AssertionError

Assertion failed — review invariants; do not use assert in prod


Session history

Every cognirepo ask exchange is persisted to .cognirepo/sessions/. Sessions are indexed by UUID and retrievable via:

# List recent sessions:
cognirepo sessions

# MCP tool — Claude calls at session start to resume context:
get_session_history(limit=5)

Each entry returns: session ID, created timestamp, message count, model used, and the last user/assistant exchange for quick context scan.


Architectural summaries

cognirepo init automatically prompts to run cognirepo summarize after the first index. This produces a 3-level LLM summary of the entire codebase:

  • Level 1 — repo-wide summary (what the project does, key modules, entry points)

  • Level 2 — per-directory summaries (what each package is responsible for)

  • Level 3 — per-file summaries (what each file contains, key functions/classes)

Summaries are stored in .cognirepo/index/summaries.json and served via the architecture_overview MCP tool — zero token cost for Claude to understand the big picture.

# Auto-prompted on first init. Run manually anytime:
cognirepo summarize

# Fully local — no API key required. Reads from ast_index.json, runs in < 1 second.
# File summaries are also embedded into FAISS for semantic architecture queries.

Multi-model orchestration

cognirepo ask automatically picks the right model for each query:

Tier

Score

Default model

Use case

QUICK

≤2

local resolver

Single-token / trivial — zero API, fastest path

STANDARD

≤4

Haiku

Quick lookup, factual, single symbol

COMPLEX

≤9

Sonnet

Moderate reasoning

EXPERT

>9

Opus

Cross-file, architectural, ambiguous — full context, best model

cognirepo ask "where is verify_token defined?"       # → QUICK, answered locally
cognirepo ask "why is auth slow?"                    # → EXPERT, Claude with full context
cognirepo ask --verbose "explain the circuit breaker"  # show tier/score/signals

Provider fallback chain: Grok → Gemini → Anthropic → OpenAI. All errors are logged to .cognirepo/errors/<date>.log — no raw tracebacks shown to users.


Language support

Language

Extensions

Install

Python

.py

built-in

JavaScript / TypeScript

.js .ts .jsx .tsx

cognirepo[languages]

Java

.java

cognirepo[languages]

Go

.go

cognirepo[languages]

Rust

.rs

cognirepo[languages]

C / C++

.c .cpp .h

cognirepo[languages]

Full details and roadmap: docs/LANGUAGES.md


Storage layout

.cognirepo/
  config.json              ← project settings (project_id, model, retrieval weights)
  vector_db/
    semantic.index         ← FAISS flat index for semantic memory
    ast.index              ← FAISS IndexIDMap2 for code symbols
    ast_metadata.json      ← parallel metadata for ast.index rows
  graph/
    graph.pkl              ← NetworkX DiGraph (optionally Fernet-encrypted)
    behaviour.json         ← per-symbol hit counts, user profile, error patterns
  index/
    ast_index.json         ← reverse symbol index + file records
    manifest.json          ← git SHA + platform info for integrity checks
    summaries.json         ← LLM architectural summaries (Level 1–3)
  memory/
    episodic.json          ← append-only event journal
  sessions/
    <uuid>.json            ← conversation session files
    current.json           ← pointer to most-recent session
  errors/
    <date>.log             ← daily error logs (full tracebacks, never shown to users)
  learnings/
    learnings.json         ← structured learnings: decisions, bugs, prod issues

Everything under .cognirepo/ is .gitignored by default — never committed. Fernet encryption is opt-in at storage.encrypt: true in config.json.


CLI reference

# Setup
cognirepo init                  # scaffold + configure; auto-indexes + auto-summarizes
cognirepo setup-env             # interactive API key wizard
cognirepo test-connection       # test API key connectivity
cognirepo migrate-config        # migrate deprecated config keys

# Indexing
cognirepo index-repo [path]     # AST-index a codebase
cognirepo summarize             # generate LLM architectural summaries (auto-prompted on init)
cognirepo seed --from-git       # seed behaviour weights from git history
cognirepo verify-index          # verify AST index integrity
cognirepo coverage              # per-directory symbol counts

# Querying
cognirepo ask <query>           # route through multi-model orchestrator
cognirepo retrieve-memory <q>   # similarity search
cognirepo search-docs <q>       # full-text search in .md files
cognirepo log-episode <event>   # append episodic event
cognirepo history               # print recent episodic events
cognirepo sessions              # list recent conversation sessions

# Memory management
cognirepo store-memory <text>   # save a semantic memory
cognirepo user-prefs            # view/set global user preferences
cognirepo prune [--dry-run]     # prune low-score memories

# Health & monitoring
cognirepo prime                 # generate session bootstrap brief
cognirepo status                # live retrieval signal weights + index health
cognirepo doctor [--fix]        # full health check; --fix auto-repairs common issues
cognirepo benchmark             # run quantitative value benchmarks

# Organization
cognirepo org create <name>     # create local organization
cognirepo org link <org> [path] # link repo to organization
cognirepo org list              # list organizations

# Daemon management
cognirepo list                  # list MCP servers, running daemons
cognirepo watch                 # manage background file-watcher daemon

Future Plans

Priorities drawn from the v0.3.0 benchmark findings and community feedback. Now at v2.0.0 — some items below have since landed; each is annotated where that's the case.

Near-term

  • Go call-graph indexingdone (COGNIREPO-203): Go receiver-qualified method calls (recv.Method()) now resolve through who_calls/CALLS edges — tree-sitter's Go selector_expression names its method field field, not property (the JS convention the extractor previously assumed), so method calls were silently dropped; fixed in _ts_collect_calls (intelligence/indexer/ast_indexer.py). A second bug in the same function — a call-collection recursion depth cap of 12, too shallow for a Go method wrapping an if-statement around a composite-literal call argument — was also raised (to 60). Go IMPORTS edges from go.mod-resolved local package imports are implemented (_extract_imports_go/_resolve_go_import_to_file). Live-verified against cognirepo_test_repo/advanced/moby: 4/4 hand-verified callers resolved (100%, vs. the 90% target) after both fixes.

  • cognirepo askdone: multi-model orchestrator (QUICK/STANDARD/COMPLEX/EXPERT tiers) is implemented and wired as a real CLI command (_cmd_ask_local, interface/cli/main.py). Streaming REPL mode (see Longer-term) is not yet built.

  • Incremental re-index on savedone: the file-watcher daemon (cognirepo watch) debounces writes (config.jsonindexing.debounce_ms, default 500ms) and batches indexer/graph saves; tests/test_watcher_debounce.py covers this including flush-on-shutdown.

  • CLAUDE.md mandatory-call relaxation — benchmark feedback (Moby tests) flagged that forcing context_pack before every file read adds latency under memory pressure. A --fast mode that skips the tool-first gate for files under 50 lines is not yet implemented.

Medium-term

  • Kubernetes / 2M-LOC scale validation — K8-1 through K8-5 test suite not yet completed. Goal: full scheduling-decision trace at < 8 000 tokens with CogniRepo vs. > 50 000 without.

  • Plugin-registry pattern detectiondone (COGNIREPO-203): a static, annotation-only heuristic pass tags symbols reachable via dynamic dispatch — celery-style @task/ @shared_task decorators, register(...)-style plugin-registration calls, Python __init_subclass__ hooks, and packaging entry-points (pyproject.toml [project.entry-points.*] / setup.cfg [options.entry_points]) — with dispatch:"dynamic" plus a RELATES_TO edge to a dynamic_dispatch CONCEPT node (_detect_dynamic_dispatch, _apply_entry_points_dispatch in intelligence/indexer/ast_indexer.py). Annotation-only by design — never fabricates a CALLS edge. Live-verified against cognirepo_test_repo/medium/celery's real @shared_task functions.

  • BM25 over symbol namespartially done: core/_bm25.py is used by intelligence/retrieval/hybrid.py as the circuit-breaker fallback ranker (and by episodic search) when embeddings are unavailable, but it isn't yet the primary ranking signal for symbol-name partial-match recall (e.g. HttpClient matching http_client) in the normal (embeddings-available) retrieval path.

  • Cross-session memory warm-up — Ansible benchmark noted episodic/memory retrieval is low-value on fresh sessions. cognirepo prime exists but is not run automatically on init; will make it opt-in default.

Longer-term

  • cognirepo ask streaming REPL — full interactive session with tier routing, session persistence, and sub-agent delegation.

  • Ruby, PHP, C#, Swift grammar support — tree-sitter grammars exist; need _TS_FUNCTION_TYPES/_TS_CLASS_TYPES mappings and call-extraction rules per language.

  • Similarity edges in knowledge graphdone (COGNIREPO-202): post-index FAISS k-NN pass over already-embedded FUNCTION/CLASS symbol vectors adds a SIMILAR_TO edge (cosine ≥ 0.80, max 5/node, cross-file only) between near-duplicate symbols, both directions. Gated via config.jsonindexing.similarity_edges (default on below 20k candidate symbols). Weighted (discounted) into intelligence/retrieval/hybrid.py::_graph_score.

  • VS Code / JetBrains extension — surface lookup_symbol, context_pack, and who_calls directly in the editor sidebar without requiring an MCP-capable host.


Documentation

Document

Description

docs/ARCHITECTURE.md

System design, component responsibilities, data flow

docs/architecture/SPECIFICATION.md

Technical spec, complexity signals, storage layout

docs/USAGE.md

Complete CLI, MCP, and Docker reference

docs/METRICS.md

Quantitative benchmarks: token reduction, lookup speedup, recall

CONTRIBUTING.md

How to add adapters, tools, and language support

SECURITY.md

Vulnerability reporting, data handling, trust model

docs/LANGUAGES.md

Language support details and roadmap


License

CogniRepo is licensed under the MIT License.

  • Free to use, study, modify, and distribute

  • Use in proprietary products and commercial services — no restrictions

  • No requirement to open-source your application

See LICENSE for full details.

Available Tools

35 tools
architecture_overviewC

Retrieve pre-computed architectural summaries. scope: 'root' for repo summary, a directory path, or a file path.

repo_path: optional absolute path to the target repository.

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeNoroot
repo_pathNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries the full burden. It mentions 'pre-computed' implying a read-only, cached operation, but does not disclose any side effects, authentication requirements, or performance characteristics. Critical behavioral traits like freshness of summaries or error handling are omitted.

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

Conciseness4/5

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

The description is short, consisting of two sentences plus parameter notes. It is front-loaded with the key verb 'retrieve'. While concise, it could be better structured (e.g., using bullet points for parameters). There is no redundant information.

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

Completeness3/5

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

Given the presence of an output schema, the description does not need to explain return values. However, the tool has 2 optional parameters and moderate complexity. The description covers the basic purpose and parameter hints but lacks usage context and behavioral details, making it adequate but not fully complete.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It explains the three allowed values for 'scope' and notes that 'repo_path' is an optional absolute path. However, it does not describe the format of directory/file paths for scope, nor does it clarify what 'architectural summaries' contain. The description adds some meaning but is incomplete.

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

Purpose4/5

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

The description clearly states the verb 'retrieve' and the resource 'pre-computed architectural summaries'. It provides parameter explanations, which help clarify the scope. However, it does not explicitly differentiate from sibling tools like 'dependency_graph' or 'subgraph', though the pre-computed nature is a distinguishing factor.

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

Usage Guidelines2/5

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

The description gives basic parameter guidance (scope values, repo_path optional), but lacks any indication of when to use this tool versus alternatives. There are no prerequisites, exclusions, or contextual cues. The agent is left guessing about appropriate usage scenarios.

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

context_packA

Budget-pack the most relevant code + episodic context into a token-bounded block ready for injection into the next prompt. Call this BEFORE reading any source file to avoid wasting tokens on raw file reads. Returns at most max_tokens (default 2000) tokens — much smaller than raw files. Do NOT call for known short files (< 50 lines) — use Read directly instead.

file: optional relative path to scope retrieval to a single file. repo_path: optional absolute path to the target repository. When omitted, defaults to the server's configured project directory.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileNo
queryYes
repo_pathNo
max_tokensNo
window_linesNo
include_symbolsNo
include_episodicNo

TDQS

A4.4/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. It discloses token-bounded output, max_tokens default, and scoping via file/repo_path. Could mention side-effect free or idempotency, but sufficient for non-destructive tool.

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

Conciseness5/5

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

Three concise sentences, no fluff. Core purpose front-loaded, followed by usage guidelines and parameter clarifications. Excellent structure.

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

Completeness4/5

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

Given 7 parameters and no output schema, description covers key aspects: purpose, when to use, token limit, and two parameters. Missing details on some parameters but overall adequate for basic usage. Could benefit from a brief example.

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

Parameters3/5

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

Schema coverage 0%, but description explains two parameters (file, repo_path) with usage context. Other parameters (query, max_tokens, include_*) are not elaborated, though names are self-explanatory. Adds some value but incomplete.

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

Purpose5/5

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

Description clearly states it 'budget-packs code + episodic context into a token-bounded block' for prompt injection. It distinguishes from raw file reads and provides specific usage directives (call before reading files, avoid for short files).

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

Usage Guidelines5/5

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

Explicitly says 'Call this BEFORE reading any source file' and 'Do NOT call for known short files (< 50 lines) — use Read directly instead.' Provides clear when-to-use and when-not-to-use with alternative.

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

cross_repo_traverseA

Traverse the org dependency graph from a repo or symbol to find cross-service relationships.

direction="dependencies" — what does this repo depend on? direction="dependents" — which services depend on this repo? direction="both" — return both directions (default)

If symbol is provided, also reports where that symbol exists in each traversed repo. Requires repos linked via cognirepo init (written to org graph). Returns empty if no sibling repos are registered.

Claude: use this when the user asks "which services use X?", "what does auth-service depend on?", or when tracing a bug across service boundaries.

ParametersJSON Schema
NameRequiredDescriptionDefault
depthNo
symbolNo
directionNoboth
start_repoNo

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description effectively discloses key behaviors: direction options, symbol reporting, prerequisite, and empty return condition. It is thorough for a read-only traversal tool, though it could mention if the traversal is recursive or cached.

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

Conciseness4/5

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

The description is well-structured with a clear opening, direction options enumerated, and usage guidance. It is moderately concise; while it could be slightly shorter, every sentence adds value and is easy to scan.

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

Completeness3/5

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

Given 4 parameters, no output schema, and no annotations, the description covers purpose, directions, symbol, and prerequisites. However, it lacks information on the return format (e.g., list of repos, dependency details), which is needed for an agent to fully understand the tool's output.

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

Parameters3/5

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

Schema coverage is 0%, so the description must explain parameters. It clearly details 'direction' with examples and explains 'symbol' behavior. However, 'start_repo' and 'depth' are not explicitly described, leaving ambiguity. The description partially compensates but misses full parameter clarity.

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

Purpose5/5

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

The description uses a specific verb ('traverse') and resource ('org dependency graph') to clearly state the tool's function. It differentiates from sibling tools like 'dependency_graph' or 'org_dependencies' by focusing on cross-service relationships and providing direction options for navigating dependencies.

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

Usage Guidelines5/5

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

The description explicitly states when to use the tool with concrete user queries ('which services use X?', 'what does auth-service depend on?') and a use case ('tracing a bug across service boundaries'). It also notes a prerequisite ('Requires repos linked via cognirepo init'), guiding proper usage.

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

dependency_graphC

Return import/dependency relationships for a module. direction: "imports" | "imported_by" | "both". depth: transitive traversal depth (1 = direct only).

repo_path: optional absolute path to the target repository.

ParametersJSON Schema
NameRequiredDescriptionDefault
depthNo
moduleYes
directionNoboth
repo_pathNo

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are present, so the description must convey behavioral traits. It explains parameter semantics but does not disclose side effects, performance implications, or whether the operation is read-only. The agent lacks information about what to expect from the tool's behavior.

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

Conciseness5/5

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

The description is extremely concise, with four short lines covering purpose and parameter details. Every sentence adds value, and the structure is front-loaded with the main action.

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

Completeness2/5

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

Without an output schema, the description should explain the return format or structure, which it does not. It also lacks information on error handling, prerequisites, or example usage. The agent may struggle to use the tool effectively.

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

Parameters3/5

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

Schema description coverage is 0%, so the description carries the full burden. It explains direction (with allowed values), depth (meaning of depth), and repo_path (optional absolute path). However, the 'module' parameter is not described (e.g., format or specification), leaving a gap.

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

Purpose4/5

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

The description clearly states 'Return import/dependency relationships for a module,' which is a specific verb-resource pair. It distinguishes the tool as focusing on dependencies, differentiating it from siblings like 'who_calls' or 'subgraph.' However, it does not explicitly contrast with similar tools.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. The description only lists parameters without explaining the ideal use case or context, leaving the agent to infer.

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

explain_changeB

Explain what changed in a file or function recently by cross-referencing git history with episodic memory events mentioning the same target.

repo_path: optional absolute path to the target repository.

ParametersJSON Schema
NameRequiredDescriptionDefault
sinceNo7d
targetYes
repo_pathNo
max_commitsNo

TDQS

B3/5.0
Behavior3/5

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

No annotations are provided, so the description carries full burden. It discloses the core behavior (cross-referencing git history and episodic memory) but omits details like side effects (none implied), error conditions, performance impact, or dependencies. Adequate but lacks depth.

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

Conciseness4/5

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

The description is two sentences, highly concise. The first sentence conveys the main purpose, the second provides one parameter detail. However, it sacrifices clarity for brevity, making it insufficiently informative. Still, no wasted words.

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

Completeness2/5

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

Given 4 parameters, no output schema, and no annotations, the description is incomplete. It does not explain return values, how cross-referencing works, or input constraints like target format. Users are left without enough context to use the tool effectively.

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

Parameters1/5

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

Schema description coverage is 0%, yet the description only briefly mentions repo_path. It does not explain target (format?), since (units?), or max_commits. The description adds minimal value beyond the schema, leaving users to guess parameter meanings.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Explain what changed in a file or function recently by cross-referencing git history with episodic memory events mentioning the same target.' It uses a specific verb (explain) and resource (changes), and the method (cross-referencing) distinguishes it from siblings like episodic_search or search_docs.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It does not mention prerequisites, exclusions, or context for use. The only extra detail is a parameter note about repo_path, which is not 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.

find_symbol_pathA

Find the shortest call-graph path between two symbols, crossing service boundaries via the org graph when needed.

Uses weighted Dijkstra (w=1.0→cost 1, w=0.75→1.3, w=0.5→2.0, cross-service org edge→5) to prefer traversal through core entry-point symbols over indirect paths.

from_symbol : Name of the source symbol. to_symbol : Name of the destination symbol. from_repo : Absolute path to source repo (auto-detected if omitted). to_repo : Absolute path to destination repo (auto-detected if omitted).

Returns {path, hops, crosses_services, services_traversed} or {error}.

ParametersJSON Schema
NameRequiredDescriptionDefault
to_repoNo
from_repoNo
to_symbolYes
from_symbolYes

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations, the description fully carries the burden of behavioral disclosure. It explains the algorithm (weighted Dijkstra with specific weights), that it can cross service boundaries via org graph, auto-detection of repos, and the return format (path, hops, etc.). This is comprehensive and transparent.

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

Conciseness4/5

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

The description is well-structured with a summary paragraph then parameter bullet points. It is slightly verbose but every sentence adds value (algorithm details, return format). A minor improvement would be to trim the algorithm weight explanation, but it is still efficient.

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

Completeness5/5

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

Given no annotations and no output schema, the description covers all necessary information: purpose, algorithm, parameter behavior, return structure, and error handling. It is complete for an agent to select and invoke correctly.

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

Parameters5/5

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

Schema coverage is 0%, so the description must add meaning for all parameters. It explains that from_symbol and to_symbol are source/destination names, and from_repo/to_repo are absolute paths or auto-detected. This adds crucial context beyond the schema's type/title only.

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

Purpose5/5

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

The description clearly states the tool finds the shortest call-graph path between two symbols, crossing service boundaries when needed. It uses a specific verb 'find' and resource 'call-graph path', and distinguishes from siblings like 'lookup_symbol' or 'who_calls' which do not find paths but rather look up symbols or callers.

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

Usage Guidelines4/5

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

The description implies when to use: when you need the shortest path, possibly crossing services. It does not explicitly state when not to use or list alternatives, but the algorithm description (weighted Dijkstra) and mention of crossing service boundaries give context for appropriate use. Sibling tools are available but not contrasted.

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

generate_insightsA

Generate/update the repo insights HTML report — a human-readable "what happened in this repo" summary (timeline, decisions, challenges, branch/ commit activity, index health), sourced only from real stored records.

Returns a small pointer, NOT the report content: {status, path, sections, updated_at}. Claude: surface the path/link in your reply — do not quote or reconstruct the report body from this tool's output.

since: history window, e.g. "90d" (default). repo_path: optional absolute path to the target repository.

ParametersJSON Schema
NameRequiredDescriptionDefault
sinceNo90d
repo_pathNo

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description must carry the behavioral transparency burden. It does so well by stating that the tool creates/updates an HTML report, sources only from real records, sacrifices returns only a pointer, and lists the exact response fields. It doesn't detail whether existing reports are overwritten or hit authorization requirements, but the disclosed constraints are enough to set expectations.

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

Conciseness5/5

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

The description is compact and well-structured: purpose first, then output constraint, then parameter definitions. Every sentence earns its place and there is no filler or redundancy.

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

Completeness4/5

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

Given that there is no output schema, the description covers the key return format and instructs the model on proper post-call usage. It contains the main input parameters, the source constraint, and an clear description of the pointer-based result. Minor gaps are the exact file handling semantics and failure behavior, but these are non-critical for a report-generation tool.

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

Parameters4/5

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

Schema coverage is 0%, so parameter explanations in the description are essential. 'since' is explained as a history window with an example and default ('90d'), and 'repo_path' is explained as an optional absolute path. This adds semantic meaning beyond the bare schema, though it could have been more explicit about the time format and whether '90d' means days.

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

Purpose5/5

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

The description states a specific action ('Generate/update') and resource ('repo insights HTML report'), and downgrades explicitly what it contains (timeline, decisions, challenges, branch/commit activity, index health). This clearly distinguishes it from the sibling search/memory/graph tools.

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

Usage Guidelines4/5

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

The description gives clear context for use: when you need a human-readable 'what happened in this repo' summary, with only real stored records as source. It also includes a direct instruction to Claude to surface the path/link and not to quote or reconstruct report content. It does not explicitly name alternatives or exclusion cases, so it stops short of a 5.

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

get_agent_bootstrapA

Single-call session bootstrap for AI agents. Replaces the 4-call sequence (get_session_brief → get_last_context → get_user_profile → get_error_patterns) with one ~300-token payload.

Returns: repo — project name architecture — 600-char architecture summary hot_symbols — ["fn:file:line", ...] top 8 symbols by behaviour weight last_focus — {files, query, agent} from last agent's context_pack framing — {depth, vocabulary} from user profile (empty if tracking off) mood — {state, evidence, suggested_adaptation}; neutral/empty on sparse data error_patterns — top 3 recurring errors with prevention hints index_health — {symbols, files, status} recent_timeline — last 5 entries (past 7 days) merged across sessions, episodes, decisions, and errors — {ts, kind, summary, ref} each; see data/memory/timeline.py::merge() for the full query surface (since/include_archived/limit)

Claude: call this ONCE at session start instead of the 4 individual calls. Use individual tools only when you need the full detail each provides.

repo_path: optional absolute path to the target repository.

ParametersJSON Schema
NameRequiredDescriptionDefault
repo_pathNo

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden and largely meets it: it discloses the payload size (~300 tokens), describes edge-case behavior such as 'neutral/empty on sparse data' and 'empty if tracking off', and documents the merged timeline query surface. It stops short of explicitly stating side-effect/read-only guarantees, but the 'get' semantics and return-oriented structure strongly imply a non-mutating operation.

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

Conciseness5/5

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

Well-structured and front-loaded: purpose and usage guidance come first, followed by a compact bulleted list of return fields, ending with the parameter definition. Every block earns its place and there is no filler or duplication of schema information.

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

Completeness5/5

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

Given there is no output schema, the description thoroughly documents the rich return payload with examples and types. It also covers usage timing, alternatives, sparse-data behavior, and points to timeline.py::merge() for extended query surface details. This is comprehensive for a bootstrap tool of this complexity.

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

Parameters4/5

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

Schema description coverage is 0%, but the only parameter is simple and optional. The description adds meaningful semantics beyond the schema's 'Repo Path' title: 'optional absolute path to the target repository'. It could further explain the default behavior when omitted, but for an optional single path this is adequate.

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

Purpose5/5

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

States a specific verb plus resource ('get_agent_bootstrap') and explains it as a single-call session bootstrap replacing a 4-call sequence. It explicitly differentiates from sibling tools like get_session_brief, get_last_context, get_user_profile, and get_error_patterns by naming them and describing the consolidation.

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

Usage Guidelines5/5

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

Provides explicit usage instructions: call ONCE at session start instead of the 4 individual calls, and use individual tools only when full detail is needed. This is unambiguous when-to-use guidance with clear alternatives.

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

get_error_patternsA

Return recurring error patterns with prevention hints to avoid repeating mistakes.

Each entry has: error_type, count, affected files, last_seen, prevention_hint, and the most recent error message for context.

Use this to guide Claude away from solutions that have historically failed.

min_count: only return errors seen at least this many times (default 1). repo_path: optional absolute path to the target repository.

ParametersJSON Schema
NameRequiredDescriptionDefault
min_countNo
repo_pathNo

TDQS

A4.2/5.0
Behavior3/5

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

No annotations exist, so description must cover behavioral traits. It discloses the return format (fields like error_type, count) but omits potential caveats such as performance impact, rate limits, or whether it requires permissions. Adequate for a read-only tool, but not rich.

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

Conciseness5/5

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

Two short paragraphs, no extraneous info. Purpose stated first, then details. Every sentence provides value.

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

Completeness4/5

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

No output schema, but description explains return fields. Tool has low complexity (2 optional params). Usage context and edge cases are covered, making it complete enough for an agent.

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

Parameters4/5

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

Schema description coverage is 0%, so description must explain parameters. It does: min_count's effect and default, repo_path's purpose as optional absolute path. This adds substantial meaning beyond the schema's type/default fields.

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

Purpose5/5

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

The description clearly states it returns 'recurring error patterns with prevention hints' and lists each entry's fields. This verb+resource definition distinguishes it from sibling tools like architecture_overview or cross_repo_search.

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

Usage Guidelines4/5

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

Explicit guidance: 'Use this to guide Claude away from solutions that have historically failed.' This clarifies the context. Does not explicitly state when not to use or name alternatives, but the context is strong.

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

get_last_contextA

Return the most recent context snapshot written by context_pack.

Call this at the START of a session to resume where the previous agent left off. Returns: query, sections, token_count, generated_at, agent, org_graph_summary. Returns {"status": "no_context"} if no snapshot exists.

Claude: call this automatically at session start when starting work on a known project. It shows what the last agent was looking at, preventing duplicate exploration and token waste.

Do NOT call on a fresh project that has never run context_pack.

repo_path: optional absolute path to the target repository.

ParametersJSON Schema
NameRequiredDescriptionDefault
repo_pathNo

TDQS

A4.6/5.0
Behavior4/5

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

Describes return values and the no-context case. Lacks explicit mention of read-only nature but implies it through 'Return' and no side effects. No annotations present.

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

Conciseness4/5

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

Well-structured with clear sections, but slightly verbose with instructions to Claude. Each sentence adds value.

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

Completeness5/5

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

Comprehensive for a single-parameter tool: covers return values, error state, usage timing, and parameter. No output schema needed.

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

Parameters4/5

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

Parameter 'repo_path' is described as optional absolute path, adding meaning beyond schema type info. With 0% schema coverage, this explanation is valuable.

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

Purpose5/5

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

The description uses specific verb 'Return' and resource 'most recent context snapshot', clearly distinguishing it from the sibling tool 'context_pack' which writes the snapshot.

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

Usage Guidelines5/5

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

Explicitly states when to call (at session start for known projects) and when not to (fresh projects without context_pack). Also mentions the alternative context_pack.

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

get_service_endpointsA

Return the HTTP endpoint registry for a service (from endpoints.json).

Endpoints are populated by cognirepo index-repo and include method, path pattern, handler function name, file, and framework.

repo_path: absolute path to the target repo (defaults to current project).

Returns {endpoints, count, scanned_at} or {endpoints: [], count: 0}.

ParametersJSON Schema
NameRequiredDescriptionDefault
repo_pathNo

TDQS

A4/5.0
Behavior3/5

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

No annotations, but description implies read-only behavior; could explicitly state non-destructive nature. Returns format helps.

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

Conciseness5/5

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

Very concise: purpose, parameter, return format, and error case in just a few sentences.

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

Completeness4/5

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

Complete for a simple tool: covers all needed info despite no output schema or annotations.

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

Parameters4/5

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

Schema has 0% description coverage, but description adds meaning: absolute path, defaults to current project.

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

Purpose5/5

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

Description clearly states it returns HTTP endpoint registry for a service, distinguishes from sibling tools like dependency_graph or cross_repo_search.

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

Usage Guidelines3/5

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

Provides parameter description with default, but no explicit guidance on when to use vs. alternatives.

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

get_session_briefA

Generate a session bootstrap brief for agent orientation.

Returns: architecture summary, entry points (most-called symbols), recent decisions from learning store, hot symbols from behaviour tracker, index health (symbol count, file count, last_indexed).

Claude: call this at the START of a session on an unfamiliar project, or when resuming after a long break. Gives you the full project map in one call — faster than reading files or running grep.

Do NOT call this repeatedly; call once at session start only.

repo_path: optional absolute path to the target repository.

ParametersJSON Schema
NameRequiredDescriptionDefault
repo_pathNo

TDQS

A4.7/5.0
Behavior4/5

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

No annotations provided, so description carries the burden. It accurately describes the tool as a read-like operation (generates a brief) and lists what it returns. Does not disclose potential side effects or auth needs, but the nature of the tool implies it is safe and non-destructive. No contradiction with any implicit annotation.

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

Conciseness5/5

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

The description is concise and well-structured: first sentence states the action, second series describes returns, then usage instructions. Every sentence adds value, and the most critical information (when to use) is front-loaded.

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

Completeness5/5

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

Given the tool's low complexity (single optional param, no output schema, no annotations), the description is complete. It explains purpose, return components, usage guidelines, and parameter meaning. No significant gaps remain for 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.

Parameters4/5

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

Schema coverage is 0%, but the description adds meaning to the single optional parameter: 'optional absolute path to the target repository.' This clarifies usage beyond the bare schema definition (anyOf string/null). The description compensates well for the lack of schema descriptions.

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

Purpose5/5

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

Clearly states it generates a session bootstrap brief for agent orientation, listing specific return components (architecture summary, entry points, recent decisions, etc.). Distinguishes from siblings like get_agent_bootstrap and get_session_history by emphasizing session start usage and project map focus.

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

Usage Guidelines5/5

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

Explicitly says 'call this at the START of a session on an unfamiliar project, or when resuming after a long break' and includes 'Do NOT call this repeatedly; call once at session start only.' Provides a comparison to alternatives: 'faster than reading files or running grep.'

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

get_session_historyA

Return recent conversation session exchanges for context continuity.

Each entry has: session_id, created_at, message_count, and last_exchange (the final user/assistant pair). Call at session start to resume context.

limit: number of most-recent sessions to return (default 10). repo_path: optional absolute path to the target repository.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
repo_pathNo

TDQS

A4.4/5.0
Behavior3/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It explains the return format (fields like session_id, created_at, message_count, last_exchange) and parameters. However, it does not explicitly state side effects or idempotency; the name implies read-only but could be more explicit about no mutations.

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

Conciseness5/5

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

The description is two short paragraphs: first defines purpose and output, second adds parameter details. Every sentence adds value, no fluff, and key information is front-loaded.

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

Completeness5/5

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

Despite having no output schema, the description fully covers what the tool returns (list of entries with specific fields) and when to call (at session start). With only 2 parameters (both explained) and no annotations needed for this read-like tool, it is contextually complete.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must fully explain parameters. It does: 'limit: number of most-recent sessions to return (default 10)' and 'repo_path: optional absolute path to the target repository.' This adds meaning beyond the schema's type information.

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

Purpose5/5

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

The description clearly states the tool's action ('Return recent conversation session exchanges') and its purpose ('for context continuity'). It specifies the resource (conversation sessions) and differentiates from siblings like 'get_last_context' and 'get_session_brief' by detailing the output fields and usage scenario.

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

Usage Guidelines4/5

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

The description explicitly says 'Call at session start to resume context,' providing clear guidance on when to use the tool. It does not explicitly mention when not to use it or alternatives, but the context of resuming continuity is sufficient.

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

get_user_profileA

Return the user's interaction style profile for Claude to adapt its responses.

Includes: depth preference, dominant question types, domain vocabulary, code-focus percentage, framing hints, and a mood signal ({state, evidence, suggested_adaptation} — neutral/empty on sparse data) Claude should apply. Precedence: explicit user request > persona > framing_hints/mood. If the user has opted into a persona (COGNIREPO-402, via record_user_preference), the payload additionally carries active_persona + persona_behavior — absent entirely when no persona is set (byte-identical to pre-402 output otherwise). Caveman persona additionally carries output_contract (COGNIREPO-403) — served ONLY when active. After sustained QUICK-tier query usage, the payload may also carry a one-line, dismissible persona_suggestion nudging toward caveman — never auto-enabled.

Call this at the start of a session to calibrate response style.

repo_path: optional absolute path to the target repository.

ParametersJSON Schema
NameRequiredDescriptionDefault
repo_pathNo

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden and does so thoroughly. It discloses output contents, sparse-data behavior, persona-related conditional payloads, byte-identical backward compatibility, and the fact that persona suggestions are never auto-enabled. This is unusually transparent.

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

Conciseness4/5

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

The primary purpose is front-loaded, and conditional details are organized into readable paragraphs. The description is fairly long, but nearly every sentence adds distinct behavioral information an agent needs; little is wasted.

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

Completeness5/5

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

There is no output schema and no annotation support, so the description must stand alone. It covers payload fields, mood signal structure, precedence, persona variants, optional suggestion behavior, and the only parameter. An agent has enough information to call the tool and interpret its result.

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

Parameters4/5

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

The schema has 0% description coverage and only provides type/default for repo_path. The description compensates with a concise, meaningful definition: 'optional absolute path to the target repository.' It could say more about behavior when omitted, but the optional-path semantics are clear.

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

Purpose5/5

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

The description names a specific verb and resource: 'Return the user's interaction style profile for Claude to adapt its responses.' It clearly distinguishes this from sibling tools by focusing on interaction-style calibration rather than memory retrieval, search, or org context.

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

Usage Guidelines4/5

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

The description gives an explicit trigger: 'Call this at the start of a session to calibrate response style.' It also explains precedence rules for how the profile should be applied. It doesn't explicitly name alternatives or state when not to use it, but it provides clear enough usage context.

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

graph_statsB

Return a health summary of the current graph state.

repo_path: optional absolute path to the target repository.

ParametersJSON Schema
NameRequiredDescriptionDefault
repo_pathNo

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden for behavioral traits. It does not disclose whether the operation is read-only, what the health summary includes, or any potential side effects. The description is too minimal for a tool with no annotations.

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

Conciseness5/5

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

The description is two sentences: purpose first, then parameter explanation. No redundant information, well-structured and efficient.

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

Completeness3/5

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

For a simple tool with one optional parameter and no output schema, the description covers the basic purpose and parameter. However, it lacks details on the return format or any behavioral context, making it minimally adequate.

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

Parameters3/5

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

With 0% schema coverage, the description adds value by specifying that repo_path is an optional absolute path. However, it does not elaborate on the format or constraints, only restating what is already in the schema schema.

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

Purpose4/5

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

The description clearly states the tool returns a health summary of the graph state, which is a specific purpose. However, it does not differentiate it from sibling tools like dependency_graph or subgraph that also analyze graph state.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives. The description only explains what it does, leaving the AI agent to infer usage context without any exclusions or prerequisites.

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

list_org_contextA

Show what org, project, and sibling repositories the current repo belongs to.

Claude: call this FIRST when the user asks about cross-service or cross-repo topics. Use the returned context to decide whether to call cross_repo_search, and which scope (project vs org) is appropriate.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It does not disclose behavioral traits like auth needs, rate limits, or side effects. However, since it is a simple read-only context retrieval, the lack of deeper disclosure is acceptable but not exemplary.

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

Conciseness5/5

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

The description is four sentences: purpose, directive, usage instruction, and role in workflow. Every sentence adds value with no waste, and the structure is clear and front-loaded.

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

Completeness5/5

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

Given no parameters and no output schema, the description fully explains what the tool returns and how to use it in context. It is complete for its simple role.

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

Parameters4/5

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

There are zero parameters, so the baseline is 4. The description does not need to add parameter info, and it correctly omits irrelevant details.

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

Purpose5/5

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

The description clearly states the tool shows org, project, and sibling repositories for the current repo, with a specific verb 'Show' and resource 'org context'. It distinguishes from siblings like cross_repo_search by providing a clear scope.

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

Usage Guidelines5/5

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

The description explicitly instructs to call this tool first for cross-service/repo queries, and how to use the result to decide on cross_repo_search and scope. This provides clear when-to-use and alternatives.

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

log_episodeA

Log a structured episodic event to the episodic memory store. Use to record what happened: bugs found, code explored, agent actions. Retrievable via episodic_search in future sessions. Do NOT use for architectural decisions — use record_decision instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
eventYes
metadataNo
repo_pathNo

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are provided, so the description bears full responsibility. It indicates the tool logs to episodic memory and is retrievable later, but lacks details on whether events are immutable, overwritten, or any side effects. It is adequate but not thorough.

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

Conciseness5/5

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

Four sentences, each earn their place: purpose, examples, retrievability, and prohibition/alternative. No filler. Front-loaded with the core action.

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

Completeness2/5

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

Despite good purpose clarity, the description omits parameter details and return behavior. For a simple logging tool with no output schema and sparse parameter descriptions, an agent lacks sufficient information to correctly construct invocations.

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

Parameters1/5

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

Schema description coverage is 0% and the description does not explain the parameters ('event', 'metadata', 'repo_path'). An agent receives no guidance on how to populate these fields beyond their types.

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

Purpose5/5

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

The description clearly states the purpose: 'Log a structured episodic event to the episodic memory store.' It provides concrete examples ('bugs found, code explored, agent actions') and distinguishes from the sibling 'record_decision' by explicitly stating it's for recording 'what happened'.

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

Usage Guidelines5/5

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

The description explicitly states when to use ('Use to record what happened') and when not to use ('Do NOT use for architectural decisions') with a direct alternative ('use record_decision instead').

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

lookup_symbolA

Return all locations where a symbol is defined or called, with file, line, and type. If include_org=True, also searches sibling repositories in the same organization. Do NOT call for broad concepts — only exact or near-exact symbol names. For concept queries use semantic_search_code instead.

repo_path: optional absolute path to the target repository. When omitted, defaults to the server's configured project directory.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
repo_pathNo
include_orgNo

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses that the tool returns locations with details, optionally expands to sibling repos with include_org, and defaults repo_path to server's project directory. It does not mention side effects or permissions, but the read-only nature is implied. Slightly missing potential edge cases.

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

Conciseness5/5

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

The description is concise with three paragraphs: first states purpose and output, second gives usage guidelines, third explains parameters. Every sentence adds value. No fluff.

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

Completeness4/5

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

For a 3-parameter tool with no output schema, the description is mostly complete. It explains return format, parameter behaviors, and exclusion criteria. It could add pagination info or result limits, but it sufficiently covers typical use cases.

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

Parameters5/5

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

The description adds significant meaning beyond the input schema: it explains that 'name' should be exact/near-exact, 'include_org' triggers sibling repo search, and 'repo_path' defaults to project directory. Schema coverage is 0%, so the description provides all contextual semantics.

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

Purpose5/5

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

The description clearly states the tool returns all locations (definitions and calls) of a symbol with file, line, and type. It distinguishes itself from sibling tools by specifying exact or near-exact symbol names, contrasting with semantic_search_code for broad concepts.

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

Usage Guidelines5/5

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

The description explicitly instructs when to use (exact/near-exact symbol names) and when not to (broad concepts), and provides a specific alternative: semantic_search_code. This is exemplary guidance.

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

org_dependenciesA

Return the bidirectional inter-repo dependency graph for the current organization.

Shows which services this repo depends on (dependencies) and which services depend on this repo (dependents), up to depth hops. Edge kinds: IMPORTS — manifest-declared package dependency (auto-detected) CALLS_API — HTTP client calls to another service's endpoint SHARES_SCHEMA — shared models/proto repo

Claude: call this when the user asks about service dependencies, "what depends on X", or when investigating cross-service call chains.

ParametersJSON Schema
NameRequiredDescriptionDefault
depthNo

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description carries the burden. It explains depth hops and edge kinds, but lacks details on read-only nature, authentication requirements, rate limits, or what happens at edge cases (e.g., depth=0). It provides moderate transparency.

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

Conciseness5/5

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

The description is concise (about 100 words), well-organized with a clear purpose, then breakouts for edge kinds, and a usage hint sentence. No unnecessary information.

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

Completeness4/5

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

For a tool of moderate complexity, the description covers the core function, parameter, edge types, and usage scenarios. Lacking an output schema, the agent may need to infer the return format, but the purpose is sufficiently clear for call selection.

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

Parameters3/5

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

The only parameter, depth, is described as controlling the number of hops, with a default of 2 indicated in the schema. However, the description does not clarify constraints (e.g., maximum depth, allowed values) or behavior for invalid inputs. Schema coverage is 0%, so the description adds some but not complete value.

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

Purpose5/5

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

The description clearly states the tool returns 'the bidirectional inter-repo dependency graph' for the current organization, specifying it shows dependencies and dependents up to a depth. It also enumerates the three edge kinds (IMPORTS, CALLS_API, SHARES_SCHEMA), distinguishing it from sibling tools like dependency_graph and who_calls.

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

Usage Guidelines4/5

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

The description explicitly advises when to call the tool: 'when the user asks about service dependencies, what depends on X, or when investigating cross-service call chains.' This provides clear usage context, though it does not explicitly state 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.

record_decisionA

Record an architectural decision, bug fix rationale, or 'why we did X'. Stored in episodic memory — retrievable via episodic_search in future sessions. Call when a non-obvious architectural decision is made, a bug root-cause is understood, or the user says to 'remember' something. Do NOT call for routine changes — only decisions where WHY is non-obvious. Returns: {stored: True, searchable_via: 'episodic_search'}

ParametersJSON Schema
NameRequiredDescriptionDefault
summaryYes
rationaleNo
repo_pathNo
affected_filesNo

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations, the description carries full burden. It states the data is stored in episodic memory, retrievable via episodic_search, and the return format. It does not disclose idempotency, overwrite behavior, or side effects, but covers basic behavioral aspects.

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

Conciseness5/5

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

The description is four sentences, front-loaded with the purpose, then storage info, usage guidelines, and return format. Every sentence is necessary, no wasted words.

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

Completeness3/5

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

The tool has 4 parameters, 1 required, no output schema. The description provides return format but lacks full parameter explanation. It differentiates from routine changes but not explicitly from similar sibling tools like log_episode or store_memory.

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

Parameters3/5

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

Schema description coverage is 0%, so description should compensate. The description explains 'summary' and 'rationale' implicitly but does not mention 'affected_files' or 'repo_path'. Adds some value but not comprehensive.

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

Purpose5/5

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

The description clearly states the tool records architectural decisions, bug fix rationales, or 'why we did X'. It specifies the verb 'Record' and the resources, and distinguishes from routine changes by emphasizing non-obvious decisions.

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

Usage Guidelines4/5

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

The description explicitly says when to call (non-obvious decisions, bug root-causes, user requests to remember) and when not to call (routine changes). It does not name alternative tools but provides clear context for usage.

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

record_errorA

Record an error Claude or the user encountered so future sessions can avoid it.

error_type: exception class name or short label (e.g. "TypeError", "build_failed"). message: error message text (truncated to 300 chars). file_path: source file where the error occurred (optional). query_context: the query or action that triggered the error (optional). repo_path: optional absolute path to the target repository.

Returns: the prevention hint for this error type.

ParametersJSON Schema
NameRequiredDescriptionDefault
messageNo
file_pathNo
repo_pathNo
error_typeYes
query_contextNo

TDQS

A4.1/5.0
Behavior4/5

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

No annotations are provided, so the description carries full burden. It discloses the return value (prevention hint) and a truncation limit (300 chars) for message. It does not discuss auth, side effects, or idempotency, but the behavior is fairly clear.

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

Conciseness5/5

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

The description is concise with a clear purpose statement followed by parameter explanations. Every sentence adds value, and it is front-loaded with the main action.

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

Completeness3/5

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

With no output schema, the description only states 'Returns: the prevention hint' without details on format or structure. The tool has 5 parameters, and while the description covers them, the return value is minimally described. Adequate but not complete.

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

Parameters4/5

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

Schema description coverage is 0%, but the description compensates by explaining each parameter: error_type, message, file_path, query_context, repo_path. This adds meaning beyond the schema field names.

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

Purpose5/5

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

The description clearly states it records an error for future avoidance, using a specific verb and resource. It distinguishes itself from siblings like get_error_patterns (retrieval) and record_decision (different action).

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

Usage Guidelines3/5

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

The description implies usage when an error occurs, but does not explicitly state when to use this tool vs alternatives, nor does it mention conditions or prerequisites. Usage is implied but lacks explicit guidance.

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

record_user_preferenceA

Store an explicit user preference or query-rewrite correction.

Standard preferences (preference_key = any label): Store as: record_user_preference("response_format", "code-first, then explanation") Surfaced via get_user_profile()['explicit_preferences'].

Query-rewrite corrections (preference_key = "query_rewrite"): Use when you asked for X but user says they actually meant Y. Store the wrong phrasing as preference_value, intent in context: record_user_preference("query_rewrite", "deploy model", context="user means: update the ML model weights in production, not software deploy") Stored in query_rewrites list; agents apply these before retrieval so future similar queries hit the right code even when phrasing is off.

Persona selection (preference_key = "persona", COGNIREPO-402): Opt-in only — never enable a persona without the user explicitly asking. Valid values: "mentor" (deeper retrieval + full explanations + links to history), "pair" (default-equivalent, mood-aware phrasing), "caveman" (economy/telegraphic output, see COGNIREPO-403). "none" clears a previously-set persona (COGNIREPO-400-D01) — not a 4th persona. An unknown value is rejected, not stored — response includes {"recorded": false, "error": "..."}. Surfaced via get_user_profile()['active_persona'] / ['persona_behavior']. Precedence: explicit user request > persona > framing_hints/mood (see CLAUDE.md).

Claude: call this when:

  • User corrects your interpretation ("no, I meant X not Y")

  • User expresses a repeated preference ("always show code first")

  • User clarifies what a query actually means in this codebase

Do NOT call for one-off answers — only for durable preferences that should persist across sessions.

ParametersJSON Schema
NameRequiredDescriptionDefault
contextNo
repo_pathNo
preference_keyYes
preference_valueYes

TDQS

A4.9/5.0
Behavior5/5

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

No annotations are present, so the description carries the full burden. It discloses persistence across sessions, where values are stored (explicit_preferences, query_rewrites, active_persona), the rejection of unknown persona values with response shape, and persona precedence.

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

Conciseness5/5

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

Organized with bold headings and short bullets; dense but every sentence adds operational value. The purpose is front-loaded before detailed call patterns.

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

Completeness5/5

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

This is a high-complexity tool with no output schema and no annotations, yet the description covers all call patterns, storage surfaces, guardrails, and error behavior. The missing repo_path semantics is minor and does not prevent correct invocation.

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

Parameters4/5

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

Schema coverage is 0%, but the description compensates strongly by explaining preference_key semantics, valid persona values, and how preference_value/context map to query-rewrite corrections. The only gap is that repo_path is not described.

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

Purpose5/5

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

Clearly states the action ('Store') and resource ('explicit user preference or query-rewrite correction'), then breaks out the three key categories. It differentiates itself from sibling record/logging tools by defining what counts as a preference vs a one-off answer.

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

Usage Guidelines5/5

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

Explicit call conditions are provided: user corrections, repeated preferences, and query clarifications. It also gives an explicit exclusion: 'Do NOT call for one-off answers' and requires opt-in for persona selection.

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

retrieve_memoryA

Retrieve the top-k memories most similar to the query. If include_org=True, also queries sibling repositories in the same organization.

repo_path: optional absolute path to the target repository. When omitted, defaults to the server's configured project directory.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
top_kNo
repo_pathNo
include_orgNo

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations provided, the description partially carries the burden. It discloses the retrieval behavior and the effect of 'include_org', but fails to mention potential limitations, authentication requirements, or whether the operation is read-only. The description is adequate but not comprehensive.

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

Conciseness5/5

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

The description is very concise, consisting of two sentences and a line for 'repo_path'. Every sentence provides essential information without fluff, and the key behavior is front-loaded.

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

Completeness3/5

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

Given the absence of an output schema, the description does not explain return values or define what constitutes a 'memory'. It is adequate for a simple retrieval but lacks completeness for a tool with 4 parameters and many siblings.

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

Parameters3/5

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

The schema description coverage is 0%, so the description must add meaning. It explains 'repo_path' in detail (optional, defaults to server directory), but provides no explanation for 'query', 'top_k', or 'include_org'. This partial coverage is mediocre.

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

Purpose5/5

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

The description clearly states the action ('Retrieve the top-k memories'), the resource ('memories'), and key modifiers ('most similar to the query', 'include_org=True'). This effectively distinguishes it from sibling tools like 'semantic_search_code' or 'episodic_search' by focusing on 'memories'.

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

Usage Guidelines2/5

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

The description lacks explicit guidance on when to use this tool versus alternatives. It mentions the 'include_org' option but does not provide criteria for when to use this tool over other search or retrieval tools in the sibling list.

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

search_docsA

Search indexed documentation files (*.md, *.rst, *.txt) by semantic similarity. Use for: README explanations, architecture docs, decision logs. Do NOT use for code — use semantic_search_code instead.

repo_path: optional absolute path to the target repository.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
top_kNo
repo_pathNo

TDQS

A4.3/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. It clearly indicates read-only semantic search on indexed docs, but does not explicitly mention auth, rate limits, or performance constraints. Still sufficiently transparent for a search operation.

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

Conciseness5/5

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

Two sentences plus one param hint, all front-loaded. Every sentence adds value with no redundancy.

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

Completeness4/5

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

Given no output schema and simple param set, description covers core behavior, usage guidance, and file type constraints. Minor gap in parameter explanation but overall sufficient.

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

Parameters2/5

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

Schema coverage is 0%, but description only explains repo_path as 'optional absolute path to the target repository.' Query and top_k are not described; top_k could benefit from explanation of result count.

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

Purpose5/5

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

States it searches documentation files by semantic similarity, specifies file types (*.md, *.rst, *.txt), and distinguishes from code search by naming sibling tool semantic_search_code.

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

Usage Guidelines5/5

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

Explicitly states what it should be used for (README explanations, architecture docs, decision logs) and what it should NOT be used for (code), with direct reference to alternative.

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

search_tokenA

Word-level reverse-index search.

Unlike lookup_symbol() which only matches defined symbol names, search_token() finds any word that appears in symbol names, docstrings, or inline comments across the indexed codebase.

Examples: search_token("background") → files containing 'background' in names/docs search_token("validate") → all functions whose docs mention validation search_token("github") → files where GitHub is referenced in comments

Returns a list of {file, line} dicts sorted by file path.

repo_path: optional absolute path to the target repository.

ParametersJSON Schema
NameRequiredDescriptionDefault
wordYes
repo_pathNo

TDQS

A4.4/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. It explains that the tool finds words in names, docstrings, and comments, and specifies the return format (list of {file, line} dicts sorted by file path). It does not mention performance or side effects, but the description is transparent about its behavior.

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

Conciseness5/5

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

The description is well-structured: purpose, distinction, examples, return format, and parameter clarification. Every sentence adds value without redundancy.

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

Completeness4/5

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

Given the tool has 2 parameters and no output schema or annotations, the description covers purpose, distinction, return format, and parameter details. It is complete for the tool's complexity, though additional context about performance or scope could further enhance it.

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

Parameters4/5

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

Schema description coverage is 0%, so description must explain parameters. The examples illustrate usage of 'word', and the description notes 'repo_path' as an optional absolute path. This adds meaning beyond the schema's minimal type information.

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

Purpose5/5

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

The description clearly states it performs word-level reverse-index search and explicitly distinguishes itself from lookup_symbol() by specifying it finds any word in symbol names, docstrings, or inline comments. This provides a specific verb-resource scope that differentiates it from siblings.

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

Usage Guidelines4/5

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

The description compares itself to lookup_symbol() and provides examples, implying when to use it (full-text search across code). However, it does not explicitly state when not to use it or list alternative tools, but the distinction is clear enough for an agent to select appropriately.

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

semantic_search_codeA

Semantic vector search over indexed code symbols only (no episodic memory mixed in). Optionally filter by language: "python", "typescript", "go", etc. Do NOT call for exact string matches — use search_token or grep instead. Use for concepts and natural-language queries about what code does.

repo_path: optional absolute path to the target repository.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
top_kNo
languageNo
repo_pathNo

TDQS

A4.4/5.0
Behavior3/5

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

No annotations are provided. The description discloses it operates only on code symbols (no episodic memory) and is read-only by nature, but lacks details on rate limits, authentication, or default behavior. Acceptable but could be improved.

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

Conciseness5/5

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

Three concise sentences with front-loaded purpose and no extraneous information. Every sentence adds value.

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

Completeness4/5

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

Moderate complexity with 4 parameters and no output schema. The description covers purpose, scope, and exclusions, but could benefit from hinting at return format (e.g., file paths, snippets) to fully compensate for missing output schema.

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

Parameters4/5

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

Schema description coverage is 0%. The description adds meaning for 'language' (lists examples) and 'repo_path' (optional absolute path), but does not explain 'query' or 'top_k' beyond what is implicit. Compensates partially for low coverage.

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

Purpose5/5

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

The description clearly states 'semantic vector search over indexed code symbols only' and distinguishes from sibling tools like episodic_search. It provides a specific verb (search) and resource (code symbols), with optional filtering by language.

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

Usage Guidelines5/5

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

Explicitly tells when to use ('for concepts and natural-language queries') and when not to ('Do NOT call for exact string matches') with alternatives (search_token or grep), providing clear context and exclusions.

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

store_memoryA

Store a semantic memory with an optional source label.

The response includes a conflicts list — existing learnings with high word-overlap to the new text. A non-empty list means a potentially contradictory memory already exists; use supersede_learning to replace it rather than letting both co-exist.

repo_path: optional absolute path to the target repository. When omitted, defaults to the server's configured project directory.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
sourceNo
repo_pathNo

TDQS

A4.2/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. Discloses that response includes a 'conflicts' list and that repo_path defaults to the server's project directory. Does not explicitly state that the tool creates a new memory (mutating) or potential side effects, but the conflict mechanism is a notable behavior.

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

Conciseness5/5

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

Three well-structured sentences: purpose, conflict explanation, and one parameter. No filler or repetition; each line adds value.

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

Completeness4/5

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

Covers purpose, conflict handling, and repo_path default. However, without an output schema, it does not fully describe the response (e.g., success indicator, memory ID). Given the complexity of memory storage, a bit more detail on the return format would improve completeness.

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

Parameters3/5

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

Description explains 'repo_path' in detail. 'source' is briefly described as 'optional source label', but 'text' is only implied by the tool's purpose and is not explicitly described. With 0% schema description coverage, the description only partially compensates for the lack of parameter documentation.

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

Purpose5/5

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

Clearly states 'Store a semantic memory with an optional source label', specifying the verb and resource. Distinguishes from sibling tools like 'retrieve_memory' and 'supersede_learning' by referencing the latter for conflict resolution.

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

Usage Guidelines4/5

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

Provides explicit context for when to use the alternative tool: if conflicts are detected, use 'supersede_learning'. However, lacks broader guidance on when to use this tool versus other storage tools like 'log_episode' or 'record_decision'.

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

subgraphC

Return the local neighbourhood of a concept or symbol as {nodes, edges}.

repo_path: optional absolute path to the target repository.

ParametersJSON Schema
NameRequiredDescriptionDefault
depthNo
entityYes
repo_pathNo

TDQS

C2.9/5.0
Behavior2/5

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

No annotations provided, so the description must disclose behavioral traits. It adds minimal context: returns nodes and edges, and mentions the optional repo_path. But it omits details like limits, performance, or behavior when entity is not found.

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

Conciseness4/5

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

The description is very short with two sentences. It is front-loaded with the main purpose, followed by a parameter note. Efficient but could be slightly more structured.

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

Completeness2/5

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

With 3 parameters (1 required) and no output schema, the description is incomplete. It does not explain the depth parameter's effect or the exact format of nodes and edges. More context is needed for a complete understanding.

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

Parameters3/5

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

Schema coverage is 0%, so the description must compensate. It explains the repo_path parameter but does not clarify entity or depth beyond the schema. This adds some value but not enough for full coverage.

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

Purpose4/5

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

The description clearly states the tool returns the local neighbourhood of a concept or symbol as {nodes, edges}. It is specific about what it does, though it does not explicitly differentiate from sibling graph tools like dependency_graph or graph_stats.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives. There is no mention of when not to use it or what prerequisites are needed.

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

supersede_learningA

Deprecate an existing memory (by ID from store_memory conflicts list) and replace it with corrected text. Use when store_memory returns a conflict that contains incorrect or outdated information.

old_id is the ChromaDB document ID returned in the conflicts list. Returns: {found_old: bool, new_id: str}

repo_path: optional absolute path to the target repository.

ParametersJSON Schema
NameRequiredDescriptionDefault
old_idYes
new_textYes
repo_pathNo
learning_typeNofact

TDQS

A3.8/5.0
Behavior3/5

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

Without annotations, the description carries the full burden. It discloses that it deprecates old memory and creates new one, and returns {found_old: bool, new_id: str}. However, it does not explain potential side effects (e.g., deletion, reversibility), how learning_type affects behavior, or error cases if old_id is not found.

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

Conciseness4/5

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

The description is short and front-loaded with the main action and usage context. It includes parameter explanations and return type. Minor redundancy: 'old_id is the ChromaDB document ID' could be integrated into the first sentence, but overall efficient.

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

Completeness3/5

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

Given no output schema and no annotations, the description is somewhat incomplete. It explains the return type but not error handling or behavior when old_id is missing. The reference to store_memory provides context, but learning_type remains undefined, and side effects are unmentioned.

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

Parameters3/5

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

Schema coverage is 0%, so description must compensate. It adds meaning for old_id (ChromaDB document ID from conflicts) and repo_path (optional absolute path). However, it fails to describe new_text (assumed from context) and learning_type (non-obvious, with default 'fact'), leaving a gap for agent understanding.

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

Purpose5/5

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

The description clearly states the tool deprecates an existing memory and replaces it with corrected text, explicitly referencing the source as the conflicts list from store_memory, which distinguishes it from siblings like store_memory itself.

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

Usage Guidelines4/5

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

The description explicitly says 'Use when store_memory returns a conflict that contains incorrect or outdated information', providing clear context. However, it does not mention when not to use it or alternative tools beyond the implied store_memory.

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

who_callsA

Return every caller of a function across the indexed repo.

First searches the call graph (AST-indexed edges). If empty, falls back to string-literal grep for dynamic dispatch patterns (APScheduler add_job, Django signals, Flask routes, Celery tasks, etc.). Dynamic hits are labelled with found_via=dynamic_dispatch_fallback. Do NOT call if you already know the callers. Expensive on large graphs.

repo_path: optional absolute path to the target repository.

ParametersJSON Schema
NameRequiredDescriptionDefault
repo_pathNo
function_nameYes

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations, the description fully discloses behavior: two-step search (AST graph then string-literal grep), dynamic dispatch pattern detection, labeling of fallback results, and cost warning. This covers all key behavioral traits an agent needs.

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

Conciseness5/5

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

Four sentences, each adding distinct value: purpose, method, fallback details with labeling, and usage warning. No redundancy, front-loaded with the core action.

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

Completeness4/5

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

The description covers behavior well but omits details on the output format (e.g., list of call sites with locations). Given no output schema, a brief note on what the result contains would improve completeness. Still, for the complexity, it is largely sufficient.

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

Parameters4/5

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

Schema coverage is 0%, but the description adds meaning for both parameters: function_name is implied as required, and repo_path is described as 'optional absolute path to the target repository.' It doesn't specify format or constraints, but provides enough context to use correctly.

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

Purpose5/5

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

The description explicitly states 'Return every caller of a function across the indexed repo,' providing a specific verb and resource. It clearly distinguishes from sibling tools like cross_repo_search or semantic_search_code by focusing on caller discovery.

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

Usage Guidelines5/5

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

The description includes when to use (needing callers), when not to use ('Do NOT call if you already know the callers'), and notes that it is 'Expensive on large graphs,' guiding cost-aware usage. It also explains the fallback strategy, implicitly advising against calling when simpler alternatives exist.

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

TDQS

B3.4/5.0
Disambiguation3/5

Several tools serve overlapping search/retrieval purposes: semantic_search_code vs search_token vs lookup_symbol vs subgraph all handle code discovery, and cross_repo_search vs org_wide_search vs org_search heavily overlap (though descriptions try to establish a hierarchy). The descriptions help differentiate primary vs fallback, but an agent could still confuse episodic_search vs retrieve_memory vs store_memory, and get_session_brief vs get_agent_bootstrap vs get_last_context all serve session-start context.

Naming Consistency3/5

Naming is mostly verb_noun (retrieve_memory, record_decision, search_docs, explain_change, link_repos), but there are notable inconsistencies: org_search vs org_wide_search vs cross_repo_search have parallel but semantically overlapping structures, and get_session_brief/get_last_context/get_agent_bootstrap/get_session_history all use get_* while also mixing nouns without a clear pattern. Some names are vague (subgraph, context_pack, who_calls) while others are very specific.

Tool Count2/5

35 tools is excessive for a code-knowledge memory server. Many tools overlap or are variants of each other (e.g., three cross-repo search tools, four session-bootstrap tools, multiple memory retrieval tools). A well-scoped server would likely need 15-20 tools; 35 creates navigation burden and redundancy.

Completeness4/5

The server covers the domain of knowledge capture, retrieval, graph relationships, and session context fairly comprehensively: memory stores, episodic logs, symbol lookup, dependency traversal, service endpoints, error tracking, and user preferences. Minor gaps exist (no obvious tool for deleting memories or removing repos, no direct tool for listing all memories), but agents can work around these via supersede_learning and the existing search tools.

Maintenance

ActivityActive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • -
    license
    Not graded
    quality
    Not graded
    maintenance
    An MCP server enabling AI assistants to store, retrieve, and manage contextual information across conversations with features like persistent memory, advanced search, tagging, and privacy controls.
  • F
    license
    Not graded
    quality
    D
    maintenance
    A MCP server that provides persistent memory for AI assistants, storing personal information, relationships, and observations to enable personalized and contextual conversations.
    4
  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP server that provides AI agents with persistent memory, cross-agent sharing, and context management, enabling them to remember conversations, track complex tasks, and evolve skills across tools.
    2
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ashlesh-t/cognirepo'

If you have feedback or need assistance with the MCP directory API, please join our Discord server