What's new in Hindsight 0.9.1
Hindsight 0.9.1 builds on 0.9.0 by hardening what shipped there and widening what you can plug into it: faster recall, a new xAI OAuth provider, transfers that carry Knowledge Pages, a sharper reflect, and a large round of reliability and correctness fixes. Self-managed deployments should upgrade — several of the fixes protect data integrity and stop background work from stalling.
- More Model Control: An xAI OAuth provider, forced-tool structured output for LiteLLM, restored prompt caching on load-balanced backends, and broader provider compatibility.
- Portable Transfers: Async document export, bank transfers that carry Knowledge Pages, and every bank config field made export+importable.
- A Sharper Reflect: Current-time temporal reasoning, entity-name resolution on sub-recalls, and synthesis that never drops evidence.
- Faster Recall: Recall's read path got substantially quicker with no change to what it returns.
- Operate with Confidence: A database-free liveness probe, strict per-bank scoping, and a large reliability and performance pass.
More Model Control
- An xAI OAuth provider. Set
HINDSIGHT_API_LLM_PROVIDER=xai-oauthto run Hindsight's LLM lanes on a SuperGrok subscription, authenticating with OAuth instead of a raw API key. - Forced-tool structured output for LiteLLM. Some LiteLLM-routed backends (for example Bedrock in certain regions) reject the
response_formatroute to structured output. SetHINDSIGHT_API_LLM_STRUCTURED_OUTPUT_FORCED_TOOL=trueto opt those backends into a forced tool call instead, so structured extraction works where response-format schemas don't. - Prompt caching restored on load-balanced backends. Server-side prompt caching now works again on load-balanced OpenAI-compatible backends, cutting latency and cost on repeated prefixes.
- Configurable Ollama thinking. Native
thinkbehavior on Ollama is now controlled throughextra_body, so you can turn reasoning on or off per your model and setup. - Broader provider compatibility. Reasoning effort is now sent explicitly whenever you configure it, so a model doesn't silently fall back to its own default.
extra_bodypassthrough is fixed for Llama.cpp / OpenAI-compatible and Codex backends, so provider-specific options actually reach the model. And inline<think>text you send as content is preserved verbatim instead of being stripped as if it were the model's own reasoning.
Portable Transfers
Moving a bank between instances got more complete this release.
- Async document export. A large document export no longer runs as a single blocking request that can tie up the API — it runs as an asynchronous operation you start and then download when it's ready.
- Transfers carry Knowledge Pages. A whole-bank transfer now includes the Knowledge Pages tree and regenerates mental-model search state on import, so a bank arrives with its wiki intact and immediately searchable — not just its raw memory.
- Every bank config field travels. Bank template export/import now round-trips every configuration field, so a restored bank is configured exactly like the original.
- Per-bank store capabilities. The storage capabilities behind a bank can now be set per bank, so different banks can enable different storage features under the same engine.
A Sharper Reflect
- It knows what time it is. Reflect now receives the current date and time, so "last week" and "recently" resolve against the actual clock instead of being left ambiguous.
- Entity names on sub-recalls. Reflect's internal sub-recalls now resolve entity names, so reasoning references real, canonical names rather than opaque identifiers.
- Synthesis never drops evidence. When reflect is forced into synthesis, it no longer discards retrieved evidence — it splits the work so every retrieved fact still reaches the answer.
Faster Recall
Recall is the hot path — an agent hits it on every turn — so its latency is felt everywhere. 0.9.1 makes it substantially faster without changing what it returns:
- Temporal extraction is ~9x faster. Working out the time window a query implies ("last week", "in 2023") used to be a meaningful slice of every recall; it's now a small one.
- Set-wise scoring. Observation expansion is scored over the whole candidate set at once instead of row by row, cutting redundant work on larger recalls.
- No redundant entity lookups. When a result already carries its entity IDs, recall reuses them instead of re-fetching — fewer round-trips per query.
Operate with Confidence
- A database-free liveness probe. A slow database no longer trips the liveness check and restarts otherwise-healthy pods. Liveness answers on its own, so a database incident stays a database incident instead of turning into a restart storm.
- Strict per-bank scoping. Document update and delete operations are now scoped by bank, closing a path where an operation could touch another bank's memory units.
0.9.1 also carries a large round of reliability and performance fixes: concurrent appends to one document no longer lose turns, retain no longer holds a database connection across a separate-store write, several deadlocks in retain and bank deletion are gone, and extreme relative date offsets no longer crash recall. Graph maintenance is faster and steadier — stale-cooccurrence pruning and chunk-delete link matching both dropped from tens of seconds to milliseconds, and the entity prune is now queue-driven instead of sweeping whole banks. Bank config values are type-validated so a bad value can't wedge background tasks, and consolidation, recall, and Knowledge Pages each pick up their own correctness fixes. See the changelog for the full list.
