What's new in Hindsight 1.1.0
Per-document change history, tag globs and bank defaults for observation scopes, new LLM, embedding and reranker providers, knowledge-page downloads, and a long round of reliability fixes
Hindsight 1.1.0 lets you see how each document changed over time, gives you more control over how observations are grouped, adds new LLM, embedding and reranker providers, and lets you download knowledge pages. Most of the release is reliability work across retain, consolidation, reflect and the worker. Everyone on 1.0.x should upgrade — see the changelog for the full list.
- Document change history: See what changed a document and which observation rebuilds it caused.
- Observation scopes: tag globs and bank defaults: Group observations by tags you don't know up front, without changing clients.
- New providers: Sign in with ChatGPT, NVIDIA NIM, an ONNX reranker, and Anthropic without a static key.
- Knowledge-page downloads: Save a page or mental model as PDF or Markdown.
- Better document search: Search document text, and see which fields matched.
- A bank default for
prefer_observations: Dedup recall results for clients that never pass the flag. - Helm: Gateway API routes, revision history limits, and extra manifests.
Document change history
Observations are rebuilt, not versioned: when a fact is edited, appended to, re-retained or invalidated, the observations built on it are deleted and rebuilt. Until now that left no trace. Each document now has a change history that shows what happened to it and which rebuild each change caused, so you can find out afterwards why an observation looks the way it does. The history starts with changes made after you upgrade.
Observation scopes: tag globs and bank defaults
A tag in observation_scopes can now be a glob. [["topic:*"]] groups each memory by whatever topic: tags it carries — handy when those tags are added during extraction and the client can't know them when it sends the request.
Banks also get default_observation_scopes, used for every retain that sends none. Set it once and memories about the same subject from different agents or sessions consolidate together, with no client change. You can also change the scopes of an existing document with PATCH; only memories whose scopes actually move get rebuilt.
New providers
- ChatGPT (
HINDSIGHT_API_LLM_PROVIDER=chatgpt): use a ChatGPT plan with Sign in with ChatGPT. Runhindsight-admin chatgpt loginonce. - NVIDIA NIM for embeddings and reranking.
- ONNX reranker: run any cross-encoder exported to ONNX in-process.
- Anthropic Workload Identity Federation: leave
HINDSIGHT_API_LLM_API_KEYunset and authenticate with your cloud identity instead of a static key.
Knowledge-page downloads
Knowledge pages and mental models can be downloaded from the control plane as PDF or Markdown.
Better document search
Document search used to match only the document id. It now matches the document text too, and tells you which fields matched — so the control plane search box finds a document by what it says. Results are capped, and when there are more matches than the cap, the total is shown as a lower bound instead of a slow exact count.
A bank default for prefer_observations
Recall's prefer_observations drops raw facts already covered by a returned observation. Set HINDSIGHT_API_RECALL_PREFER_OBSERVATIONS (or the bank's recall_prefer_observations) to turn it on for callers that never pass it, such as MCP connectors. It stays off unless you configure it, and a value in the request still wins.
Helm
The chart adds Gateway API HTTPRoutes, a configurable revisionHistoryLimit, and extraObjects for deploying any extra manifests next to Hindsight.
One breaking change: a new bank ID can no longer start with _, which is now reserved. Importing an archive into a new bank now checks its ID too, so an invalid one fails with a 400 up front. Existing banks are not affected.
This release also fixes a long list of correctness and stability issues: database deadlocks between consolidation, retain and delete; a failed chunk replacing a document that was already stored; retains replayed after an LLM key was rejected; large graph reads freezing the API; and workers now shut down gracefully on a single SIGTERM. When the LLM concurrency cap is full, live API requests now get the next free slot ahead of background jobs, so reflect and synchronous retain stay responsive while consolidation catches up. Failed LLM chain members cool down instead of being retried on every request, and mental-model refreshes now use the global failover chain. Five database migrations run on startup; all of them are quick, including the one that clears placeholder dates from memory_units, which goes through an index instead of scanning the table. See the changelog for everything.
By Nicolò Boschi