v0.12.0.md
docs/release-notes/v0.12.0.md
Tesserae v0.12.0 — multi-project by default
<!-- translations:start -->
한국어 · 中文 · 日本語 · Русский · Español · Français · Deutsch
<!-- translations:end -->
Released 2026-06-29 · PyPI · GitHub release · pip install --upgrade tesserae==0.12.0
There is no "active project" anymore. Every registered project is live at once — ask routes itself across them, serve serves them all under one site, and compile can now build the LLM concept layer the deterministic extractor omits.
No active project — a smart ask router
The "active project" concept is gone: tesserae projects activate and the activate_project MCP tool are removed, and every per-project command resolves the project from the directory you're standing in. All registered projects are equal.
A bare tesserae ask now routes itself:
- names a project → that project;
- comparative or general → federated (one merged, cross-referenced answer over the union);
- a follow-up ("and why?") keeps the previous route; a topic shift ("what about other?") reroutes.
The clear cases resolve for free; an optional LLM tiebreaker handles the genuinely ambiguous middle, and a short per-conversation history keeps a multi-question thread coherent. Explicit --scope current|all-registered|federated still works.
One server for every project — tesserae serve
Bare tesserae serve now serves every registered project under a single server: a projects landing at /, each project at /<alias>/, a Projects switcher in the header, and per-project session views. The in-page ask widget works live, routed to the project of the page that asked. tesserae serve --project X still serves a single project. Requests are path-contained (no escaping a project's site dir) and the ask endpoint is same-origin gated with a request-size cap.
Build the concept layer in compile — --extractor
tesserae compile --extractor claude-cli (or --extractor selective-claude --claude-include "<glob>" --claude-limit N) builds the concept/claim layer that the deterministic default leaves sparse — concepts, claims, capabilities, evidence spans, and typed edges. It's hardened for real corpora, where one noisy or slow document used to abort a whole compile:
- an edge type outside the controlled vocabulary is dropped, not fatal;
- a document that exceeds the per-doc timeout falls back to deterministic extraction for that file;
- a transient invalid generation is retried (the model is non-deterministic, so a re-call almost always validates).
Also in this release
- Cognee 1.0 compatibility — Cognee 1.0 removed the
INSIGHTSsearch type Tesserae defaulted to, which silently broke the cogneeaskbackend. It now maps toGRAPH_COMPLETION(answer over the knowledge graph), so cognee works again; pass--cognee-search-type CHUNKSfor raw retrieval. tesserae setup— a top-level, interactive machine-wide setup (LLM provider/effort + which optional dependencies to install); flags skip the prompts, and installs work in pip-lessuv toolenvironments.- Docs — README, quickstart, installation, the MCP guide, feature-map, and the integration guides updated for the above (no more "active project").
Upgrading from v0.11.x
Mostly drop-in. Breaking: tesserae projects activate and the activate_project MCP tool are removed — per-project commands resolve by current directory, and ask routes across your projects automatically. If you scripted projects activate, just delete it. Single-project use is unchanged.