Biggest release since 1.0.0. Install size cut from ~1.5 GB to ~50 MB (no PyTorch/CUDA).
34 tools, new get_agent_bootstrap(), behaviour tracking, atomic writes, org rewire, and 25+ bug fixes.
Added
-
get_agent_bootstrap() MCP tool — Single-call session start replacing a 4-call sequence. ~300 tokens vs ~900 — massive efficiency gain for agents.
-
supersede_learning() MCP tool — Deprecate and replace an outdated memory entry in one call. No more stale knowledge accumulation.
-
cognirepo org rewire — Re-runs cross-service CALLS_API detection for every indexed org repo; repairs edges missed when services were indexed in the wrong order.
-
org_wide_search transparency — Returns
{'{'}{'{'}results, count, repos_searched, repos_skipped{'}'}{'}'}} — missing repos are now visible instead of silently absent.
-
who_calls coverage honesty — When static call graph returns ≤2 callers, grep fallback is merged in and a
coverage_note warns about dynamic/interface dispatch.
-
Behaviour tracking — Opt-in query recording across
context_pack, lookup_symbol, who_calls, semantic_search_code, episodic_search. Encrypted when encryption is on. Auto-summarizes interaction style every 10 queries.
-
Service port auto-detection —
cognirepo init detects server.port, YAML port:, and .env PORT=; surfaced via get_agent_bootstrap child_services.
-
indexing.unskip_dirs config — Un-skip default-skipped directories per repo (companion to
skip_dirs).
-
Doctor checks 18–20 — AST index JSON validity, doc-index populated, org CALLS_API edges present. Now validates all 34 registered MCP tools.
-
queried_symbols + recently_modified_files in session brief — Replaces the misleading
hot_symbols label.
Changed
-
pip install cognirepo — ~50 MB (was ~1.5 GB) — fastembed/ONNX replaces sentence-transformers + PyTorch. No more CUDA/nvidia packages on
pip install cognirepo.
-
org_wide_search — Marked as PRIMARY cross-repo tool;
org_search marked DEPRECATED fallback.
-
behaviour.json — Encrypted/decrypted using same Fernet key as
graph.pkl when encryption is on.
Fixed (25+ bugs)
-
Encryption flag read from wrong repo —
get_storage_config() was resolving .cognirepo/config.json relative to bare CWD; 76k-node kubernetes graph reported 0 nodes on load (silent empty graph bug).
-
Segfault at end of large-repo indexing — chromadb 1.5.8 Rust core hits infinite recursion on large stores. Fix: doc ingestion now runs in isolated subprocess; crash-evidence self-heal with
.opening sentinel and automatic quarantine.
-
context_pack empty on Kubernetes-style repos —
staging/ removed from default skip dirs (holds real first-party source in k8s).
-
AST index corruption on large repos — Writes are now atomic (tmp +
os.replace + fsync). Corrupt files renamed .corrupt and self-heal on load.
-
Subgraph memory blowup — Bounded BFS (hub nodes with degree > 500 skipped). Responses capped at ~30k chars. A single
subgraph(depth=3) can no longer inflate RSS past the circuit-breaker limit.
-
Cross-process memory freshness —
LocalVectorDB reloads FAISS index + metadata when another process wrote them (mtime check before searches). Long-lived MCP servers no longer serve stale snapshots.
-
Go structs/interfaces missing from index —
type_spec added to tree-sitter class types; architecture_overview now shows Scheduler, Kubelet etc. for Go repos.
-
fastembed migration — Removed all
model.encode() calls across 11 files; replaced with model.embed() generator API.
-
Memory duplicates —
store_memory and learning store dedupe identical (whitespace-normalized) text.
-
BFS O(n) queue —
list.pop(0) → collections.deque.popleft() in 3 locations.
-
context_pack response shape — Always returns
{'{'}{'{'}query, status, token_count, sections, truncated{'}'}{'}'}}; no more 3 different shapes.
- And 15+ more fixes — see full CHANGELOG on GitHub.
Docs
- docs/MCP_TOOLS.md — All 34 tools documented.
- MANUAL_TEST_SUITE.md — 39-test manual test suite with prompts and result blocks.
First stable release. Production-ready, Development Status: 5 - Production/Stable. 32 MCP tools, CI pipeline, external benchmark validation, multi-agent support.
Added
- cognirepo setup — One-command onboarding: init + index + writes MCP configs for Claude, Cursor, VS Code.
- get_last_context() / get_session_brief() — Resume full session state in <1s. New agent picks up mid-thought from where the previous stopped.
- repo_path parameter on all 32 MCP tools — Single server process serves multiple repos without cross-repo data leaks.
- _repo_ctx() context manager — Thread-safe per-call repo scope switching via ContextVar.
- Idle resource eviction — Evicts embedding model, KnowledgeGraph, ASTIndexer after configurable idle TTL (default 10 min); frees ~400 MB+.
- GET /status/detailed REST endpoint — Full diagnostics JSON (uptime, FAISS size, graph stats, circuit breaker).
- Grafana dashboard — Pre-built Grafana 10 dashboard (HTTP rate, latency p50/p95, FAISS vectors, graph nodes/edges) at
deploy/grafana/cognirepo.json.
- precision@k benchmark — External repo golden sets for flask, fastapi, celery, ansible.
- CI workflow — pytest on Python 3.11 and 3.12; bootstraps
.cognirepo index before suite; --cov-fail-under=50.
- Cursor MDC rules —
.cursor/rules/cognirepo.mdc with alwaysApply: true, session-start sequence, NEVER directives.
- VS Code MCP config —
.vscode/mcp.json for VS Code / GitHub Copilot integration.
Changed
- Install size ~75% smaller —
anthropic, google-generativeai, openai moved to [providers] optional extra.
- cognirepo doctor exit codes —
0=healthy, 1=warnings only, 2=any error.
- publish.yml — Migrated to OIDC trusted publishing;
wheel-smoke job added between build and publish.
Fixed
- org_graph.py concurrent writes —
_org_lock() using ~/.cognirepo/org_graph.lock; Fernet encrypt/decrypt on load/save.
- lookup_symbol(include_org=True) thread-safety — Replaced process-wide globals with
_CTX_DIR.set() / _CTX_DIR.reset() ContextVar pattern.
- Concurrent cache miss amplification —
_IN_FLIGHT dict + threading.Event dedup; N concurrent misses → 1 retrieve call.
- Test suite — 702 passed, 14 skipped, 2 xfailed, 0 failures. All cross-contamination eliminated.