Skip to content

Releases: ca1773130n/Tesserae

v0.16.0

Choose a tag to compare

@ca1773130n ca1773130n released this 06 Jul 12:49

Make the tesserae serve sessions page live: a new origin-gated /api/sessions endpoint scans the Claude Code harness roots on the fly and renders currently-active sessions above the compiled table, and the fast transcript-search box merges fresh live hits ahead of the memex index. The live scan is Claude-only (sub-second, directory-scoped); codex stays served from the index and the compiled projection. tesserae summary and tesserae decisions gain a --max-turns flag to cap turns read per session. The page degrades cleanly to compiled content on static hosting. Additive, drop-in over v0.15.x.

v0.15.0

Choose a tag to compare

@ca1773130n ca1773130n released this 05 Jul 15:50

Adds tesserae decisions — retrieve decisions across every registered project within a time range. Human decisions are extracted deterministically from Claude Code's AskUserQuestion tool (question + chosen option + alternatives); agent decisions are LLM-mined from the conversation (opt out with --no-llm). Each is dated by its own timestamp, so a window is exact. Exposed as a CLI command, a query_decisions MCP tool, and a /decisions slash command; the explicit human decisions also feed the activity summary's Decisions & Insights.

PyPI: https://pypi.org/project/tesserae/0.15.0/ · npm: https://www.npmjs.com/package/@jokerized/tesserae

v0.14.0

Choose a tag to compare

@ca1773130n ca1773130n released this 05 Jul 01:44

Adds tesserae summary — daily and weekly activity summaries that reconstruct what happened from your actual work across every AI-agent account (~/.claude*, ~/.codex*): agent sessions (windowed per-turn in KST, never a long session's start), git commits, GitHub PRs, and ingested docs. Output is a structured per-project narrative (Shipped / Fixed / Decisions & Insights / Sessions) that summarizes each session's conversation, over a deterministic, auditable facts digest — exposed as a CLI command, an activity_summary MCP tool, and a /summary slash command. Also: cited evidence now renders entity names instead of raw node-<hash> ids, and the wiki site's graph view is fixed (3D renderer restored, 2D graph enabled, mode-switch framing fixed).

PyPI: https://pypi.org/project/tesserae/0.14.0/ · npm: https://www.npmjs.com/package/@jokerized/tesserae

v0.13.2 — clip endpoint trusts only the published extension

Choose a tag to compare

@ca1773130n ca1773130n released this 04 Jul 05:04

A small security hardening for the web clipper, now that the Clip to Tesserae Chrome extension is published.

POST /api/clip trusts only the published extension. tesserae serve's CORS policy previously trusted any chrome-extension:// / moz-extension:// origin — so any extension a user had installed could POST clips into their local server. Now the extension origin must be allow-listed: the published extension by default (zero config), plus any ids you add to a clip_extension_ids list in ~/.tesserae/config.json (your own unpacked dev build, Firefox, or a fork):

{ "clip_extension_ids": ["your-dev-build-extension-id"] }

Loopback http(s) origins, the no-Origin caller, and the orthogonal clip_token control are unchanged. The list is read fresh per request — no restart to trust a new id.

Drop-in over v0.13.x. If you clip with the published extension, nothing changes.

Full notes: https://github.com/ca1773130n/Tesserae/blob/main/docs/release-notes/v0.13.2.md

v0.13.1 — manage compile sources (local & global)

Choose a tag to compare

@ca1773130n ca1773130n released this 29 Jun 21:05

Manage a project's compile scope from the CLI instead of hand-editing config.json.

tesserae sources add | list | removetesserae compile compiles the dirs in the project's sources list; now you can manage it, and a source can be local (inside the project) or global (anywhere on disk):

tesserae sources add docs                 # local  — stored project-relative
tesserae sources add /data/shared-notes   # global — absolute, outside the project
tesserae sources add ../sibling-project   # global — a relative path that escapes the root
tesserae sources list                     # tags each local/global, flags missing
tesserae sources remove docs

A path inside the project is stored project-relative (portable); anything outside is stored absolute. Both resolve at compile time, so a global source compiles like a local one. Adds dedupe by resolved location (the absolute and ../-relative forms of the same dir never double-count) and missing-path flags in list.

Drop-in over v0.13.0.

Full notes: https://github.com/ca1773130n/Tesserae/blob/main/docs/release-notes/v0.13.1.md

v0.13.0 — the LLM concept layer is the default

Choose a tag to compare

@ca1773130n ca1773130n released this 29 Jun 20:26

Tesserae is an LLM wiki, so tesserae compile now builds the concept/claim layer by default.

--extractor llm is the default. Compile reads each doc through your configured provider — codex / claude / Anthropic API, per llm_provider — via the same client session extraction uses (no more Claude-only path). --extractor deterministic is the explicit byte-stable opt-out (CI / reproducible). No default timeout — a big design doc runs to completion instead of being silently truncated. Provider-neutral flags --llm-provider/--llm-model/--llm-include/--llm-limit (the claude-cli/--claude-* names still work as deprecated aliases). Graceful: no backend → deterministic + warn; a per-doc backend error falls back to deterministic for that doc instead of aborting the compile; content-keyed caching reuses unchanged docs.

tesserae compile                              # LLM concept layer, your provider
tesserae compile --extractor deterministic    # structural / byte-stable / key-free
tesserae compile --extractor selective-llm --llm-include 'docs/**/*.md' --llm-limit 20

Faster federated ask — the assembled cross-project graph is memoized in-process, keyed on each member's graph-file signature so it self-invalidates the moment any member recompiles. Skips ~0.6s of re-assembly per repeat query on a real 6-project / 22.6k-node federation.

Upgrading: the one behavior change is that compile does LLM extraction by default; pass --extractor deterministic for the old structural-only behavior (and a machine with no provider already falls back to it automatically).

Full notes: https://github.com/ca1773130n/Tesserae/blob/main/docs/release-notes/v0.13.0.md

v0.12.2 — daemon fd-exhaustion + recency-aware ask

Choose a tag to compare

@ca1773130n ca1773130n released this 29 Jun 17:58

Two bug fixes (drop-in over v0.12.x):

tesserae engine fd exhaustion. A long-running daemon (especially fleet mode) could spiral into Too many open files / unable to open database file storms — the session tailer opened every known transcript's .jsonl (+ a sqlite connection) on every tick. A cheap stat() now skips idle transcripts, vanished files are pruned, and a truncated file is re-read from the start. Steady-state ≈ 0 opens for the idle majority. Recommended if you run tesserae engine across many projects.

Recency-aware ask. Federated ask blended pure semantic relevance, so a 'what's recent' query magneted onto old 'Review ALL improvements' syntheses. It now blends in a recency score anchored on a node's session timestamps (started_at/ended_at), a leading date in its title, else neutral — relevance still dominates (0.25 default), tunable via ask --recency-weight (0 = pure relevance). Compiled/export artifacts stay byte-deterministic.

Full notes: https://github.com/ca1773130n/Tesserae/blob/main/docs/release-notes/v0.12.2.md

v0.12.1 — every endpoint routes in fleet serve

Choose a tag to compare

@ca1773130n ca1773130n released this 29 Jun 10:09

Completes the multi-project serve story from v0.12.0: in a bare tesserae serve (every registered project), all /api/* now route to the right project/api/ask, /api/ask/health, /api/transcript-search by the page's /<alias>/ Referer, and /api/clip (which comes from an external page) by an explicit project alias in the body, the sole registered project, or a 400 listing the aliases. The Chrome extension gained a Target project setting. Transcript search fails closed with 409 when two projects share a directory name (memex can't scope them apart). Plus docs: a compile --extractor guide and cognee GRAPH_COMPLETION / fleet live-ask coverage. Drop-in over v0.12.0.

Full notes: https://github.com/ca1773130n/Tesserae/blob/main/docs/release-notes/v0.12.1.md

v0.12.0 — multi-project by default

Choose a tag to compare

@ca1773130n ca1773130n released this 28 Jun 16:11

v0.12.0 makes Tesserae multi-project by default. The "active project" concept is removed — a smart ask router targets the right project across all registered ones (federated fallback, optional LLM tiebreaker, per-conversation continuity), and bare tesserae serve serves every project under one server with a Projects switcher and per-project live ask. tesserae compile --extractor claude-cli|selective-claude builds the LLM concept/claim layer, hardened so noisy or slow docs never abort a compile (drop unknown edges, per-doc fallback, retry transient generations). Plus Cognee 1.0 compatibility (INSIGHTS→GRAPH_COMPLETION), pip-less uv-tool installs, an interactive tesserae setup, and docs updated throughout.

Full notes: https://github.com/ca1773130n/Tesserae/blob/main/docs/release-notes/v0.12.0.md

v0.11.0 — cross-project federated graph

Choose a tag to compare

@ca1773130n ca1773130n released this 27 Jun 14:36

Tesserae v0.11.0 — cross-project federated graph

한국어 · 中文 · 日本語 · Русский · Español · Français · Deutsch

Released 2026-06-27 · PyPI · GitHub release · pip install --upgrade tesserae==0.11.0

A feature release: ask across all your registered projects at once, with a single cross-referenced, cited answer. Drop-in over v0.10.x.

Cross-project federation

tesserae ask --scope federated --scope-aliases research work "…" (and the MCP ask tool with scope: "federated") assembles one graph from the projects you name and returns a single answer that cross-references them — instead of the all-registered fan-out that returns one answer per project. Your per-project .tesserae/graph.json is never touched; the federation is assembled in memory at query time.

Two ways projects connect:

  • Identity merge (always on). The same entity across projects — same arXiv id, repo, content hash, or code symbol — collapses into one node. High-precision, deterministic, no embeddings. So a paper you clipped in research and referenced in work becomes a single cited node.
  • Semantic links (on by default, opt-out). The same idea in different words — e.g. a caching decision in work and a cache paper in research — gets an embedding-backed cross-project link, so retrieval can bridge related, not just identical, concepts. Down-weighted so an identity match always outranks a fuzzy bridge. Pass --no-semantic for identity-only. Needs a real embedding backend (pip install tesserae[semantic]); without one it degrades cleanly and says so.

The link threshold (0.55) and bridge weight (0.5) are not guesses — they're set from a precision/recall + swamping eval (evals/federation/, guarded in CI).

Inspect it

  • tesserae federation status [aliases] [--semantic] — per-project node counts, identity merges, semantic-link counts.
  • tesserae federation explain <node> [aliases] — why a node bridges projects: which projects it identity-merged across and its semantic links (with similarity and target project). Accepts a namespaced id or a merged-away id.

Federated semantic links are cached at ~/.tesserae/federation/, keyed on project content so the cache auto-invalidates when any project recompiles.

Also in this release

  • Chrome extension — the README now documents the correct default endpoint (http://127.0.0.1:8765, IPv4) to match the shipped extension default.

Upgrading from v0.10.x

Drop-in. Federation is opt-in per query (--scope federated); nothing changes for single-project use. For semantic bridging, pip install tesserae[semantic].