Skip to main content

What's new in Hindsight 0.9.0

· 6 min read
Nicolò Boschi
Hindsight Team

Hindsight 0.9.0 builds on 0.8.6 around one big idea: Knowledge Pages — living documents a bank writes about itself, browsable and searchable like a wiki, kept true by memory underneath. Plus a redesigned control plane, a new OpenAI provider, and finer per-operation model control.

  • Knowledge Pages: Living documents a bank writes about itself — organized like a wiki, projected to disk as real files, searchable.
  • A Redesigned Control Plane: A refreshed design system, the Knowledge Base view, and structured reflect output rendered inline.
  • More Model Control: The OpenAI Responses provider, per-operation llm_extra_body, a provider-agnostic embedding token cap, and a reranker failover chain.
  • Troubleshoot Mental Models: Dry-run a refresh and keep the trace, without touching the live model.
  • Build on Hindsight: A pluggable storage backend, source chunks in the agent SDK, a configurable entity-resolution threshold, and accurate freshness signals.

Knowledge Pages

A memory system is only as useful as what you can read back out of it. Knowledge pages make that direct: each page is a living document a bank writes about itself, answering one question — "What are the components here?", "What's our error-handling convention?" — and rewriting itself as the bank learns more.

The shape is a wiki. The engine underneath is memory.

  • Organized like a wiki. Pages live in a tree of folders — Architecture/, Runbooks/, Decisions/ — each holding pages that stay current on their own. A hierarchy, the way anyone would organize documents by hand.
  • Projected as real files. hindsight fs mount --bank my-bank mirrors the tree onto disk: real directories, each page a markdown file with frontmatter, kept current by a background refresh. From there everything ordinary works — ls, cat, grep, your editor, an agent's file tools. No SDK, no new vocabulary.
  • Searchable at the document level. A query returns whole pages, ranked, with snippets — full-text and semantic matching fused server-side, fast enough to be the first thing an agent reaches for.
  • A projection, not storage. A page is a view over processed memory, the way a database view is not a table. Delete one and nothing is lost — it re-projects from memory. Because Hindsight has already extracted, deduplicated, and reconciled the underlying facts, a page reflects what holds now, not every contradictory thing that was ever said.

Under the hood a knowledge page is a mental model with the hard decisions pre-made — built from consolidated observations, refreshed incrementally in scope, never citing other pages. You supply a name and a question; everything else is a default you can override. See the Knowledge Pages docs for the full model, and the API reference for the endpoint surface. For the story of how Knowledge Pages came to be — and how coding agents put them to work — see our 0.9.0 launch post.

A Redesigned Control Plane

The control plane got a full pass over its design system this release, and a new home for knowledge pages.

  • The Knowledge Base view. Browse the folder tree, read page contents, and see at a glance which pages have fallen behind.
  • Structured reflect and mental-model output, rendered inline. When reflect or a mental model returns structured output, the control plane now renders it as structured output instead of a wall of text.
  • Honest freshness. Mental-model freshness is now reported from the bank's write watermark, so "this model is up to date" reflects whether new memory has actually landed since the last refresh.
  • A retain-in-flight badge. Documents show when an async retain operation is still updating them, so "why isn't this here yet?" has a visible answer.
  • A logo for every coding agent. Documents and memories written by a coding agent now carry that agent's logo — not just the five we started with — so you can tell at a glance where a memory came from.

More Model Control

  • The OpenAI Responses provider. Set HINDSIGHT_API_LLM_PROVIDER=openai-responses to use OpenAI's Responses API directly.
  • Per-operation llm_extra_body. Merge arbitrary provider parameters into the request body, and now do it per operation: HINDSIGHT_API_RETAIN_LLM_EXTRA_BODY, HINDSIGHT_API_REFLECT_LLM_EXTRA_BODY, and HINDSIGHT_API_CONSOLIDATION_LLM_EXTRA_BODY override the global HINDSIGHT_API_LLM_EXTRA_BODY for that stage only.
  • A provider-agnostic embedding token cap. HINDSIGHT_API_EMBEDDINGS_MAX_INPUT_TOKENS truncates over-long inputs before they reach the embedder, across every provider — no more provider-specific failures on an oversized chunk.
  • A reranker failover chain. Configure an ordered list of rerankers with indexed HINDSIGHT_API_RERANKER_<n>_* settings; if one is unavailable, recall falls through to the next instead of failing.
  • A reranker candidate cap. HINDSIGHT_API_RERANKER_MAX_CANDIDATES bounds how many candidates recall sends to the reranker (default 300, 0 to disable) — a direct lever on rerank cost and latency.

Troubleshoot Mental Models

When a mental model refreshes into something you didn't expect, you needed to overwrite the live model to see why. Not anymore: dry-run a refresh to compute the next version without persisting it, and keep the trace to see exactly what the refresh read and decided. The live model stays untouched while you debug.

Build on Hindsight

  • A pluggable memories storage backend. The storage layer behind a bank is now an interface, so alternative backends can sit under the same engine.
  • Source chunks from the agent SDK. agent_knowledge_recall can return the source chunks behind a result, not just the synthesized answer.
  • Faster, tunable entity resolution. The pg_trgm similarity threshold for matching entity labels is now configurable (set once at connection setup), so you can decide how fuzzy is too fuzzy for your data. Under the hood resolution also got faster and stopped blocking the event loop under heavy ingestion — fuzzy probing is skipped where an exact match will do, and candidate scoring is bounded.
  • Custom OCR headers for the file parser, for OCR services that need them.
  • Accurate last-write times. Banks and documents now report their real last-write time, so freshness checks and staleness logic have something honest to read.
  • A lighter schema. The never-written memory_units.access_count column is gone.

0.9.0 also carries a large round of reliability and correctness fixes — across recall, consolidation, retain, entity deletion, worker shutdown, and scheduled maintenance. Two things stand out. For self-managed deployments, Hindsight no longer holds a pooled database connection across embedder or LLM calls, a source of pool exhaustion under load — upgrading is recommended. And local installs are smoother: macOS no longer needs a Rust toolchain to install. See the changelog for the full list.