Hindsight: agent memory that stores observations, not transcripts
Hindsight: Agent Memory That Learns
At a glance
- What is it?
- Hindsight is a Python agent memory system from Vectorize that turns conversations into retained chunks, then distills them into observations and mental models. It ships as a server, a set of clients and an embedded mode, under MIT.
- Who is it for?
- Adopt Hindsight if you already have an agent loop and want memory that produces observations rather than a raw transcript store, and if you accept running an LLM-backed service next to it. Do not adopt it if you need a memory layer with no model dependency at all, or if you cannot send retained content to whichever provider HINDSIGHT_API_LLM_PROVIDER points at.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 1 day ago.
- What is it written in?
- Mainly Python, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.
DEEP OPEN-SOURCE ANALYSIS
What Hindsight is for, and who ends up running it
Most memory layers for agents are retrieval over message history. You embed past turns, store the vectors, and pull the nearest ones back into the prompt. Hindsight takes a different position. The README states that the project is "focused on making agents that learn, not just remember," and that it aims to eliminate shortcomings the authors attribute to RAG and knowledge graph approaches.
The audience follows from that. This is for teams that already have an agent loop and have hit the ceiling of stuffing retrieved conversation turns into context. It is also for teams that want a memory service they can host themselves, since the repository ships a Docker image, a Helm chart, a pip package and an embedded Python mode. The presence of hindsight-integrations, hindsight-clients in Python, TypeScript and Go, and an MCP server directory in the repository layout shows the intended shape: one memory service, many front ends.
It is not a general vector database and it is not a note-taking app. The unit of value is the observation, which the project treats as a distilled statement rather than a stored message.
Retain, recall, reflect: the three operations and what sits behind them
The README names three operations. Retain writes content into a memory bank. Recall reads it back. Reflect is the step that produces something new from what was retained, which is where the learning claim lives. Around those sit observations, mental models and knowledge pages, and the bank is the container that scopes a memory set, so one deployment can hold separate memories for separate agents or users.
The mechanism is LLM-backed at ingest, not only at query time. The .env.example file shows a retain LLM slot and per-operation sampling temperatures with defaults of verification=0.0, retain=0.1, reflect=0.9 and consolidation=0.0. That tells you retention is a model call, and that consolidation is a separate pass that runs at a different temperature. There is also a vision slot: HINDSIGHT_API_VLM_PROVIDER and its model and key variables are used only for retain chunks that carry an inline attachment, so a bank that ingests the occasional screenshot does not need a vision model for its text.
That design has a cost you should price before adopting. Writing memory is not free and not instant, and the quality of what you recall depends on the model you point HINDSIGHT_API_LLM_PROVIDER at. The project supports 25+ providers according to the README, including local ones such as ollama, lmstudio and llamacpp, so the ingest cost can be moved onto your own hardware, but it does not disappear.
Installing Hindsight and running a first retain and recall
The README recommends Docker. You export a provider key, then start the container with two published ports: the API on 8888 and the UI on 9999. The volume mounted at /home/hindsight/.pg0 is what keeps your data across restarts, so do not drop it.
export OPENAI_API_KEY=sk-xxx
docker run -it --pull always --name hindsight --restart unless-stopped -p 8888:8888 -p 9999:9999 \
-e HINDSIGHT_API_LLM_API_KEY=$OPENAI_API_KEY \
-v hindsight-data:/home/hindsight/.pg0 \
ghcr.io/vectorize-io/hindsight:latestAfter that, the API answers on http://localhost:8888 and the UI on http://localhost:9999. If you would rather not run a container, the same README gives a pip path that installs the server and starts it directly.
pip install hindsight-api
export HINDSIGHT_API_LLM_API_KEY=sk-xxx
hindsight-apiThe client is a separate package per language. For Python it is hindsight-client, for Node it is @vectorize-io/hindsight-client, and the Go module path is github.com/vectorize-io/hindsight/hindsight-clients/go. Install the one that matches your agent.
pip install hindsight-client -UBefore your first run, copy .env.example to .env and set at least HINDSIGHT_API_LLM_PROVIDER, HINDSIGHT_API_LLM_API_KEY and HINDSIGHT_API_LLM_MODEL. The example ships with openai, gpt-4o-mini and a commented-out HINDSIGHT_API_LLM_BASE_URL, which is the hook for any OpenAI-compatible endpoint. The README does not document the full request and response schema for retain and recall in the repository files shown here, so read the documentation site for the exact payloads rather than guessing them.
The LLM dependency is the limitation, not an implementation detail
Hindsight cannot be evaluated as a pure storage component. Retain calls a model, consolidation calls a model, and reflect calls a model. If your provider is down, or your key expires, memory writes stop. That is a different failure profile from a vector store, where ingest is deterministic and only retrieval quality varies.
There is also a privacy boundary to draw explicitly. Every retained chunk is sent to whichever provider HINDSIGHT_API_LLM_PROVIDER names, unless you run a local provider such as ollama or llamacpp. Teams with data residency constraints should treat the provider variable as the deciding config key, not an afterthought. The README lists air-gapped setups among the options covered in its installation guide, which implies self-contained deployment is possible, but the repository files shown here do not spell out the air-gapped procedure.
Finally, the benchmark claim deserves careful reading. The README says Hindsight reached state-of-the-art performance on LongMemEval and that results were independently reproduced by researchers at Virginia Tech's Sanghani Center and The Washington Post, while noting that other vendors' scores are self-reported. That is a stronger provenance statement than most projects make, but it is still a benchmark. Your workload is not LongMemEval, and the project's own live results page is where per-model accuracy, latency and cost are published. Check those numbers for the model you intend to run, not the headline.
How Hindsight differs from Mem0 and from plain RAG
The nearest comparison the README invites is with RAG and knowledge graph memory. In a plain RAG memory layer, the pipeline is embed, store, retrieve, paste. Nothing is written back in a transformed form. Hindsight inserts a distillation step: retained content becomes observations, and observations feed mental models and knowledge pages. The practical difference is that recall can return a synthesized statement about a user rather than five old messages that mention them.
Against Mem0, the difference is packaging and operation count. Mem0 positions itself as a memory layer you add to an agent, and it is commonly run as a library or a hosted service. Hindsight ships an explicit server with a UI on port 9999, a control plane directory in the repository, a Helm chart for Kubernetes and an embedded Python mode for skipping the server entirely. That is a heavier deployment surface, and it buys you a service you can inspect and operate independently of the agent process. If you want a library you import and forget, Hindsight's server-first shape is more than you asked for.
The honest trade-off: more moving parts, more configuration keys, and a model in the write path. In exchange you get memory that is transformed at ingest rather than merely indexed.
Licence, maintenance and what an upgrade actually costs
The repository is MIT licensed, and the LICENSE file sits at the top level. For most teams that means you can use, modify and redistribute the code, including in commercial products, provided you keep the copyright notice and permission notice. That is a summary of the licence text, not legal advice; if your organisation has a policy on copyleft or attribution, run the actual LICENSE file past whoever owns that policy. The README also points to a hosted Hindsight Cloud option, which is a separate commercial service and not covered by the MIT grant.
On maintenance, the last push was on 2026-09-15 and the repository is not archived. The release history shown here runs v0.9.1 on 2026-08-14, v0.9.2 on 2026-08-25 and v0.10.0 on 2026-09-14, so releases are frequent and the version number is still in the 0.x range. Treat 0.x as a signal about interface stability, not about activity. There is a release workflow badge and a .githooks directory with a setup script referenced from package.json, which suggests the project enforces its own conventions on contributors.
The upgrade cost is the part the README does not document. There is no migration guide or rollback procedure in the repository files shown here. Because the Docker example uses ghcr.io/vectorize-io/hindsight:latest, a routine pull can move you across minor versions without warning. Pin a specific tag in production, back up the volume behind /home/hindsight/.pg0 before upgrading, and read the release notes for v0.10.0 to see whether the storage format changed.
What to check before you point an agent at it
Run the server, open the UI on port 9999, and retain a handful of realistic turns for one bank. Then recall them and read what comes back. The question to answer is whether the returned observations are the kind of statement your prompt can use directly, or whether they need another summarization pass, which would defeat the purpose.
Next, test the provider path you actually intend to use in production. If that is a local runtime, set HINDSIGHT_API_LLM_PROVIDER to ollama or llamacpp and confirm retention still works, because the quality of observations will differ from a hosted model. If you need to suppress thinking blocks from a self-hosted reasoning model, HINDSIGHT_API_LLM_REASONING_EFFORT accepts none. If your provider rejects explicit temperatures, HINDSIGHT_API_LLM_TEMPERATURE accepts none as well.
Finally, decide between the server and the embedded mode before you write integration code. The repository contains hindsight-embed, and the README lists an embedded Python path with no server required. Choosing wrong means either running a container you did not need or rewriting your client wiring later.
Editorial conclusion
Adopt Hindsight if you already have an agent loop and want memory that produces observations rather than a raw transcript store, and if you accept running an LLM-backed service next to it. Do not adopt it if you need a memory layer with no model dependency at all, or if you cannot send retained content to whichever provider HINDSIGHT_API_LLM_PROVIDER points at. Before committing, verify three things in your own environment: that the provider and model you set in HINDSIGHT_API_LLM_MODEL are reachable from the host running the container, that the volume mounted at /home/hindsight/.pg0 survives a container restart, and that the recall path returns observations for the retention granularity you chose. The README does not document rollback of a server upgrade, so pin the image tag rather than following latest.
Frequently asked questions
What is Hindsight?
Hindsight is an agent memory system from Vectorize, written primarily in Python and licensed under MIT. The README describes it as built to make agents learn over time rather than only recall conversation history, through retain, recall and reflect operations over memory banks.
How do you install Hindsight?
The README recommends Docker: export a provider key, then run the ghcr.io/vectorize-io/hindsight:latest image with ports 8888 and 9999 published and a volume at /home/hindsight/.pg0. Alternatives listed are pip install hindsight-api followed by running hindsight-api, a Helm chart, an external PostgreSQL compose file, or the hosted Hindsight Cloud.
What does Hindsight have to do with hindsight bias?
Nothing. Hindsight here is the name of a software project from Vectorize, and the repository contains no discussion of the cognitive bias of the same name.
What is another word for hindsight?
That is a question about the English word, not about this project. The repository and README use Hindsight only as the product name for the agent memory system.
Community notes