v0.7.0.md
docs/release-notes/v0.7.0.md
Tesserae v0.7.0 — tesserae ask answers without an API key
<!-- translations:start -->
한국어 · 中文 · 日本語 · Русский · Español · Français · Deutsch
<!-- translations:end -->
Released 2026-06-10 · PyPI · GitHub release · pip install --upgrade tesserae==0.7.0
tesserae ask now synthesizes real answers over the CLI you're already logged into — no ANTHROPIC_API_KEY required — and rotates across every account on your machine so a rate limit never stops it. Plus two fixes that make the sessions you ask about searchable and a compile that no longer aborts.
1. tesserae ask synthesizes over the claude/codex CLI — no API key
Previously, tesserae ask could only write an answer through the Anthropic SDK, which needs ANTHROPIC_API_KEY. If you run the common setup — logged into the claude or codex CLI over OAuth — ask silently degraded to raw search hits with (no LLM answer: LLM disabled).
Now the answer path reuses the same OAuth clients the JSON extractors already use. tesserae ask --llm "<question>" (or TESSERAE_QUERY_LLM=1) synthesizes a cited answer with zero API keys — exactly the no-key promise the rest of the engine makes.
2. It rotates across every account on the machine
The CLI clients already auto-discover every ~/.claude* config dir and every ~/.codex* home. v0.7.0 makes ask use that — and chains it across providers: a question only gives up once every account is exhausted.
In practice: with all your Claude accounts at their Sonnet/weekly limit, a real tesserae ask --llm rotates through them, then falls through to Codex, and answers (model=cli-oauth) — no key, no manual account switching. A rate-limited or logged-out account is skipped, not fatal.
3. Fix: session titles no longer collapse to the harness preamble
Codex prepends # AGENTS.md instructions for <path> to every transcript, so the session-title heuristic took that as the title for every session — and keyword search returned a wall of indistinguishable boilerplate at identical scores. Titles now skip the injected AGENTS/CLAUDE/GEMINI.md preamble (and system wrappers) and come from your actual first instruction; ask returns distinct, relevant hits again.
Two smaller ask fixes ride along: the LLM gate (--llm / TESSERAE_QUERY_LLM) is honored on the wiki-search path (it was hard-disabled before), and when --backend auto falls back because a richer backend errored (e.g. a cognee auth failure), it now says so instead of silently looking like wiki was the only backend tried.
4. Fix: compile no longer aborts on a stale cached reference
A full tesserae compile / refresh could fail with KeyError: 'CodeFunction:…' — a code node id that no longer exists. Session findings filter their references against the doc graph at extraction time, but findings are cached per chunk; when a referenced node's id later changes (e.g. a code function whose content-hash id shifts when the code is edited) or vanishes, the cached finding replayed a stale reference, fabricating a dangling node that broke a downstream code-graph step. References are now re-validated against the live graph at merge time — linked when the target still exists, dropped when it doesn't.
Upgrading from v0.6.1
Drop-in. To get answers from ask without an API key, just be logged into the claude or codex CLI and pass --llm. If you'd hit the compile KeyError, re-run tesserae compile (or refresh) — it now skips stale references instead of aborting.