v0.10.0

FlowiseAI/Flowisev0.10.0Sep 14, 2026by github-actions[bot]

Upgrading?

AI Summary

This release introduces significant performance optimizations for the Retain memory engine, specifically replacing TikToken with QuickTok and improving embedding batching. It adds new features for Knowledge Base management, including text search toggles and export capabilities, alongside infrastructure enhancements like Prometheus monitoring and internationalization support.

Key Highlights

  • Performance optimization: Replaced TikToken with QuickTok and switched to the o200k_base tokenizer.
  • Knowledge Base enhancements: Added per-bank text search toggles, export functionality for transfers, and a new Business Executive bank template.
  • Infrastructure upgrades: Added Prometheus ServiceMonitor support, internationalization (i18n) for knowledge bases, and additional Helm configuration options.

New Features

  • Per-bank enable_text_search toggle for vector recall
  • Export knowledge base in document transfers
  • Business Executive bank template
  • Prometheus operator ServiceMonitor support
  • Internationalization (i18n) for knowledge base
  • --trigger-mode full|delta flag for mental-models update
  • Helm extraContainers and extraInitContainers support
  • Native Ollama path honoring configured LLM timeout

Full Release Notes

## What's Changed
* docs: changelog and blog post for v0.9.2 by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3765
* fix(retain): batch a document's chunk embeddings instead of one request per chunk by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3785
* perf(tokenizer): replace tiktoken with quicktok and default to o200k_base by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3788
* fix(benchmarks): repair retain_memory's imports of removed engine symbols by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3789
* retain: rebuild an oversized item's sub-batch from its original span by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3806
* fix(search): score pg_textsearch results per row by @mameikagou in https://github.com/vectorize-io/hindsight/pull/3802
* retain: accumulate a document's body instead of rebuilding it per sub-batch by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3809
* fix(coding-agents): don't let one stray file abort the Claude import, and give Prime Agent the companion skill (#3771, #3772) by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3812
* fix(control-plane): scope the Knowledge view's page and mental model ids to the current bank by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3813
* blog: Your Agent Can Now Manage Its Own Knowledge Base Over MCP by @benfrank241 in https://github.com/vectorize-io/hindsight/pull/3822
* feat(recall): add a per-bank enable_text_search toggle for pure vector recall by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3819
* feat(templates): add Business Executive bank template by @benfrank241 in https://github.com/vectorize-io/hindsight/pull/3834
* blog: How We Made Retain's Peak Memory Flat, from 4 MB to 90 MB Documents by @benfrank241 in https://github.com/vectorize-io/hindsight/pull/3839
* fix(transfer): remap mental model evidence ids by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3833
* feat(alembic): let a deployment own a maintenance routine by @cdbartholomew in https://github.com/vectorize-io/hindsight/pull/3842
* docs: update retain extraction mode documentation by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3838
* feat: export knowledge base in document transfers by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3855
* fix(llm): honor OpenAI's x-ratelimit-reset-* headers on 429s by @romanbsd in https://github.com/vectorize-io/hindsight/pull/3508
* blog: Cross-Encoder Reranking — The Last Stage of Agent Memory Recall by @benfrank241 in https://github.com/vectorize-io/hindsight/pull/3868
* fix(retain): bound the within-batch link passes so a delta cannot OOM the worker (#3848) by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3856
* Fix TEI stale socket retries by @oldnicke in https://github.com/vectorize-io/hindsight/pull/3375
* feat(control-plane): add i18n for knowledge base and refine mental models by @Sanderhoff-alt in https://github.com/vectorize-io/hindsight/pull/3677
* fix(embeddings): bounded retry/backoff + timeout for litellm/litellm-sdk providers by @icculp in https://github.com/vectorize-io/hindsight/pull/3090
* fix(worker): detect stuck tasks by stage progress by @BrianHotopp in https://github.com/vectorize-io/hindsight/pull/3720
* test: restore the global metrics collector instead of leaking it (#3780) by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3816
* fix(providers): native ollama path honours the configured LLM timeout by @MasterST1337 in https://github.com/vectorize-io/hindsight/pull/3797
* feat(helm): add extraContainers and extraInitContainers to api, worker and control plane by @Adrastopoulos in https://github.com/vectorize-io/hindsight/pull/3801
* fix(reflect): accept a top-level array of delta operations by @ebarkhordar in https://github.com/vectorize-io/hindsight/pull/3829
* feat(helm): add Prometheus operator ServiceMonitor support by @aWN4Y25pa2EK in https://github.com/vectorize-io/hindsight/pull/3847
* perf(local): skip full GC for CPU reranker providers by @Sanderhoff-alt in https://github.com/vectorize-io/hindsight/pull/3858
* feat(pg_search): allow extension function schema to be configured by @Sanderhoff-alt in https://github.com/vectorize-io/hindsight/pull/3759
* fix(worker): bound wedged consolidation tasks by @Sanderhoff-alt in https://github.com/vectorize-io/hindsight/pull/3746
* [CLI] Add a `--trigger-mode full|delta` flag to `mental-models update` by @mdbenito in https://github.com/vectorize-io/hindsight/pull/3513
* fix(sdk): send only the trigger settings the caller named by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3913
* fix(retain, reflect): drop the source-language rule when an output language is set by @feniix in https://github.com/vectorize-io/hindsight/pull/3777
* fix(retain): sanitize model-derived fact text by @BrianMcBrayer in https://github.com/vectorize-io/hindsight/pull/3730
* fix(kb): apply a knowledge-node patch in one transaction by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3914
* fix(admin): sync identity sequences after restore by @r266-tech in https://github.com/vectorize-io/hindsight/pull/3844
* fix(api): preserve webhook validation status codes by @r266-tech in https://github.com/vectorize-io/hindsight/pull/3832
* fix(openclaw): add non-interactive flags to plugin install in smoke test by @Sanderhoff-alt in https://github.com/vectorize-io/hindsight/pull/3917
* feat(mental-models): meter model content by what is delivered, not by which endpoint served it by @cdbartholomew in https://github.com/vectorize-io/hindsight/pull/3869
* fix(embed): read CLI profile config as UTF-8 by @koriyoshi2041 in https://github.com/vectorize-io/hindsight/pull/3850
* fix(tests): name the ANN index the plan must use (#3619) by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3911
* fix: propagate configured temperature through reflect calls by @koriyoshi2041 in https://github.com/vectorize-io/hindsight/pull/3828
* fix(db): memoise InvalidNameError GUC rejections like UndefinedObjectError by @Andreymi in https://github.com/vectorize-io/hindsight/pull/3826
* fix(api): round-trip the whole retain item so reprocess replays it faithfully by @shauneccles in https://github.com/vectorize-io/hindsight/pull/3874
* fix(security): run operation validator in get_mental_model_history (#… by @Sword-Saint69 in https://github.com/vectorize-io/hindsight/pull/3835
* fix(cli): preserve base64 '=' padding when parsing config-file api_key by @2anoubis in https://github.com/vectorize-io/hindsight/pull/3909
* fix(search): delegate pgroonga query tokenization to pgroonga_tokenize by @Sanderhoff-alt in https://github.com/vectorize-io/hindsight/pull/3907
* fix(retain): constrain occurred_start/occurred_end so grammar-constrained models can't emit prose by @nickanderson in https://github.com/vectorize-io/hindsight/pull/3845
* refactor(bank): eliminate redundant existence queries in _ensure_bank_exists by @Sanderhoff-alt in https://github.com/vectorize-io/hindsight/pull/3672
* perf(retain): optimize embedding_to_pgvector serialization via zero-copy orjson by @Sanderhoff-alt in https://github.com/vectorize-io/hindsight/pull/3815
* fix(llm): raise OutputTooLongError when a non-streaming completion is truncated by @ebarkhordar in https://github.com/vectorize-io/hindsight/pull/3827
* fix: recover Codex OAuth refresh after shared auth rotation by @dwayn in https://github.com/vectorize-io/hindsight/pull/3804
* fix(tests): stop generating webhook parametrize uuids at collection time by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3922
* fix(consolidation): apply one LLM response's writes in one transaction by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3923
* fix(coding-agents): stop unsafe gitlog cleanup by @r266-tech in https://github.com/vectorize-io/hindsight/pull/3879
* fix(embed): decode control center log tail as UTF-8 by @koriyoshi2041 in https://github.com/vectorize-io/hindsight/pull/3918
* fix(llm): derive visible output tokens from total on OpenAI-compatible providers (#3851) by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3920
* fix(coding-agents): stop opencode's install from replacing a JSONC config by @etnperlong in https://github.com/vectorize-io/hindsight/pull/3843
* feat: expose core mental model trigger settings over MCP by @Sanderhoff-alt in https://github.com/vectorize-io/hindsight/pull/3739
* docs(docker): add guide and recipe for building CUDA standalone image by @Sanderhoff-alt in https://github.com/vectorize-io/hindsight/pull/3749
* fix(reflect): accept id-bearing blocks in delta add_section ops (#3901) by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3919
* docs: stop recommending --user for Docker bind mounts (#3863) by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3934
* fix(search): embed the whole mental-model document on every write by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3928
* fix(daemon): drop the idle timeout that could kill an in-flight request by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3930
* fix(anthropic): group consecutive tool results into one user message by @zlguo1996 in https://github.com/vectorize-io/hindsight/pull/3910
* fix(llm): repair malformed JSON in the openai-compatible provider (#3683) by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3935
* fix(documents): skip the retag cascade when a tags PATCH changes nothing (#3912) by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3931
* fix(embeddings): add retry logic and dimensions config for LiteLLM provider (#3695) by @Sanderhoff-alt in https://github.com/vectorize-io/hindsight/pull/3744
* fix(recall): score coarse dates from their period, not its first day (#3893) by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3933
* fix(docker): ship images free of fixed HIGH CVEs and scan them daily by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3936
* memories: unify store-owned writes, delta-retain CAS, and PG-free tracking by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3696
* docs(hermes): disable Hermes's built-in memory via config flags by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3940
* fix(recall): honour min_scores.keyword on every text-search backend (#3882) by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3938
* fix(llm): give every provider a real per-request deadline (#3898) by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3946
* Fuse observation graph expansion into one database fetch by @jervaise in https://github.com/vectorize-io/hindsight/pull/3859
* fix(embeddings): bound ONNX forward passes and import embed calls (#3891) by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3948
* fix(search): drop search-trace fields that are structurally always empty by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3947
* feat(reflect): send the operation schema on mental model delta refresh by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3937
* fix(retain): make reprocess re-extract instead of silently no-opping (#3899) by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3949
* config: read a bank's own config fresh, not through the per-process cache by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3952
* fix(tests): isolate the worker claim tests in their own schema (#3963) by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3970
* feat(coding-agents): add native DeepAgents Dcode integration by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3967
* fix(docker): drop npm from the runtime stages and scan every runtime base by @rschlek in https://github.com/vectorize-io/hindsight/pull/3960
* config: keep the hot path cached; freshness belongs to the caller that needs it by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3975
* coding-agents: keep the installed runtime current by itself by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3965
* fix(monitoring): make Grafana dashboards importable on older Grafana by @oldnicke in https://github.com/vectorize-io/hindsight/pull/3972
* memories: an edit writes its own vector, in the same write as the fields by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3964
* fix(knowledge): switch native knowledge BM25 from websearch AND to disjunctive OR by @Sanderhoff-alt in https://github.com/vectorize-io/hindsight/pull/3945
* fix(coding-agents): only ever ADD to a bank's config, never overwrite it by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3966
* fix(engine): authorize and provision banks before legacy mutations by @Sanderhoff-alt in https://github.com/vectorize-io/hindsight/pull/3969
* feat(coding-agents): add qwen-code as a hook harness by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3979
* metrics: time the operation-validator hooks, which run outside the operation's timer by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3976
* fix(coding-agents): stop a failed git probe from forking a worktree into its own bank by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3981
* fix(consolidation): resolve observation_scopes before tag-set batching by @ferrastas in https://github.com/vectorize-io/hindsight/pull/3954
* fix(structured-output): strip $ref sibling keywords from strict schemas by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3944
* fix(bank-template): resolve stale snapshot race during template import by @Sanderhoff-alt in https://github.com/vectorize-io/hindsight/pull/3971
* fix(retain): stop deriving the extraction narrator from the bank's display name (#3962) by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3978
* fix(mental-models): skip the reflect loop when the scope holds nothing to read by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3943
* fix(coding-agents): survey prompt says Glob, not Read, for the directory layout by @MasterST1337 in https://github.com/vectorize-io/hindsight/pull/3796
* docs(docker): reserve shared memory for embedded PostgreSQL by @aunitt in https://github.com/vectorize-io/hindsight/pull/3896
* fix(coding-agents): identify safe MCP knowledge reads by @altaywtf in https://github.com/vectorize-io/hindsight/pull/3818
* fix(worker): rotate slots across banks so bulk ingest stops starving them (#3861) by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3980
* feat(llm): per-provider Codex credentials directory (#3793) by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3983
* feat(webhooks): emit X-Hub-Signature-256 and a timestamped signature by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3986
* fix(ci): stop one stalled Gemini call from outliving the caller, and isolate the third claim-test file by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3982
* fix(reflect): name the sections array the document schema requires by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3984
* coding-agents: support opencode 2, whose plugin API shares nothing with v1's by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3985
* fix(recall): boost the prioritised arm in rank space, not score space (#3956) by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3987
* feat(coding-agents): add per_source observation scoping by @shauneccles in https://github.com/vectorize-io/hindsight/pull/3872
* chore(coding-agents): sync generated files after per_source (#3872) by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3994
* feat(extensions): add hindsight-extensions registry and unbundle Supabase by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3988
* feat(coding-agents): first-class pi support, sharing one extension adapter and installer with Prime Agent by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3993
* feat(changelog): enumerate each release's migrations, with tables and volume by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3996
* fix(coding-agents): the runtime auto-update never fired — registry 406 on the /latest media type by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3997
* blog: What's New in Hindsight Cloud — June-August Updates by @benfrank241 in https://github.com/vectorize-io/hindsight/pull/3951
* blog: date the Cloud roundup 2026-09-01 by @benfrank241 in https://github.com/vectorize-io/hindsight/pull/4000
* metrics: time the recall phases, so the request's largest share stops being a residual by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3999
* fix(reflect): fail the run when a retrieval tool fails, and record refused refreshes by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4003
* fix(llm): name the phase a stalled LLM request died in (#3881) by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3992
* fix(tracing): name API traces after the operation and link queued retain to its worker by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4006
* metrics: record a store-answered recall's phases on ordinary traffic, not only under a trace by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4007
* fix(retain): invalidate observations when a re-retain changes a document's scoping by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4019
* docs: make every integration changelog reachable, and compact the Integrations Hub by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4005
* fix(local-models): copy misaligned weights out of mapped storage, and fail fast by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4020
* fix(loop-watchdog): don't report the stall that stop() itself causes by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4021
* feat(entity-labels): add an open-vocabulary multi-valued label type (multi-text) by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4027
* perf(tokenizer): move token counting from quicktok to toktok-rs by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4022
* fix(api): warm dateparser locale dictionaries once, under a lock by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4032
* perf(api): stop importing LiteLLM and markitdown on every startup by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4031
* fix(mental-models): return 409 on a duplicate mental-model id by @kubaodias in https://github.com/vectorize-io/hindsight/pull/4024
* fix(clients): close the bank-config drift between the wrapper SDKs and the server by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4030
* feat(api): run migrations in a subprocess, controlled by a flag by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4033
* fix: two test regressions from #4022 and #4031 (tokenizer cache leak, markitdown OCR fail-fast) by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4036
* feat(recall): fuzzy tag matching on tag_groups leaves (#4026) by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4028
* fix(cursor): register hooks on init, ship rules_file.py, flush on sessionEnd by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4041
* fix(recall): score fuzzy tag similarity on the value, not the namespaced tag by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4045
* refactor(retain): format pgvector literals without orjson, and drop orjson entirely by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4040
* blog: Four More Coding Agents That Remember Your Project by @benfrank241 in https://github.com/vectorize-io/hindsight/pull/4042
* feat: run Hindsight on free-threaded CPython 3.14 (-py3.14t image) by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4037
* feat(api): serve from several event loops in one process by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4067
* memories: drop count_chunks from the extension seam by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4080
* perf(embeddings): issue a remote provider's batches concurrently (#4039) by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4043
* refactor(api-slim): write each duplicated policy once by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4083
* chore(deps): bump esbuild to 0.28.x and body-parser to 1.20.6 by @cdbartholomew in https://github.com/vectorize-io/hindsight/pull/4050
* chore(deps): bump nltk to 3.10.3 in the llamaindex and pipecat locks by @cdbartholomew in https://github.com/vectorize-io/hindsight/pull/4051
* chore(deps): bump fast-uri to 3.1.7 and browserslist to 4.28.8 by @cdbartholomew in https://github.com/vectorize-io/hindsight/pull/4088
* ci: run the core suite when the workspace lockfile or root manifest changes by @cdbartholomew in https://github.com/vectorize-io/hindsight/pull/4089
* chore(deps): bump torch to 2.13.0 and tornado to 6.5.8 by @cdbartholomew in https://github.com/vectorize-io/hindsight/pull/4052
* chore(deps): bump agno to 3.0.5 by @cdbartholomew in https://github.com/vectorize-io/hindsight/pull/4096
* blog: Enterprise Features in Hindsight Cloud by @benfrank241 in https://github.com/vectorize-io/hindsight/pull/4004
* chore(deps): override json-repair past crewai's pin by @cdbartholomew in https://github.com/vectorize-io/hindsight/pull/4098
* security: pin the llama.cpp prompt cache to RAM by @cdbartholomew in https://github.com/vectorize-io/hindsight/pull/4102
* fix(tracing): attach bank ID to retain spans by @koriyoshi2041 in https://github.com/vectorize-io/hindsight/pull/4109
* fix(temporal): stop dateparser segfaulting the API under free-threading by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4110
* fix(api): paginate GET /observations/scopes and GET /webhooks by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4075
* chore(deps): remove unused tornado dependency by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4111
* fix(cli): print the server's response body on API errors (#4049) by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4113
* fix(api): run tenant provisioning migrations through the isolation boundary by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4117
* fix(embed): forward every HINDSIGHT_* var to the daemon instead of a whitelist by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4119
* feat(llm): add Meta Model API as a first-class provider by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4081
* feat(retain): inline images and files as first-class content by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4077
* fix(api): install every PostgreSQL extension in the public schema (#4118) by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4121
* fix(retain): keep per-memory entity-label tags when a re-retain rewrites document tags (#4068) by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4120
* fix(api): give each event loop its own extension context by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4123
* fix(embeddings): let litellm-sdk invoke a Bedrock inference profile ARN by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4114
* refactor(api-slim): return a named result from LLMInterface.call by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4122
* fix(reflect): run split synthesis's map calls at temperature 0 by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4115
* fix(embeddings): route Gemini through the shared embedding retry policy by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4124
* fix(opencode-go): send x-opencode-session, one id per operation (#4071) by @benfrank241 in https://github.com/vectorize-io/hindsight/pull/4084
* feat(control-plane): banks overview page with bulk delete by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4125
* chore(deps): bump banks to 2.5.0 in the llamaindex integration lock by @cdbartholomew in https://github.com/vectorize-io/hindsight/pull/4132
* test: make two deselection markers actually apply by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4126
* fix(embeddings): route Cohere and ZeroEntropy through the shared retry policy by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4129
* feat(api)!: retire the bank profile and background endpoints by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4127
* fix(embeddings): one TEI http client per thread, not one per provider by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4138
* fix(codex): defer work until quota reset by @0xble in https://github.com/vectorize-io/hindsight/pull/4161
* fix(reranker): give every remote reranker bounded retry by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4139
* chore: update the tagline to "Agent Memory That Learns" by @cdbartholomew in https://github.com/vectorize-io/hindsight/pull/4093
* fix(cli): restore default SIGPIPE handling to prevent abort on broken pipe by @2anoubis in https://github.com/vectorize-io/hindsight/pull/3925
* fix(openclaw): restore compatibility with OpenClaw 2026.8.1+ by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4178
* fix(temporal): "last weekend" asked on a weekend means the previous one by @NgoQuocViet2001 in https://github.com/vectorize-io/hindsight/pull/4076
* fix(retain): scrub the whole retain item at the engine ingress, not field by field by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/3921
* fix(llm): identify OpenAI-compatible requests by @SharkyRawr in https://github.com/vectorize-io/hindsight/pull/4078
* fix(cache): preserve force refresh across event loops by @koriyoshi2041 in https://github.com/vectorize-io/hindsight/pull/4072
* fix(openclaw): resolve Dashboard agent identity from four-part session keys by @r266-tech in https://github.com/vectorize-io/hindsight/pull/4149
* fix(coding-agents): scope knowledge pages to the bank, not the session's cwd (#4146) by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4184
* fix(operations): allow cancelling in-flight operations (#4131) by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4177
* feat(openclaw): add recall score floors by @koriyoshi2041 in https://github.com/vectorize-io/hindsight/pull/4145
* fix(server): load .env before importing MemoryEngine to honor concurrency limits by @Sanderhoff-alt in https://github.com/vectorize-io/hindsight/pull/3939
* fix(docker): drop unused libxml2 from runtime images by @rschlek in https://github.com/vectorize-io/hindsight/pull/4055
* perf(docker): replace RUN chown with COPY --chown to speed up image building by @SharkyRawr in https://github.com/vectorize-io/hindsight/pull/4141
* fix(api-slim): read the opencode-go retry assertion off LLMCallResult.content by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4181
* fix(ci): unbreak test-api — the call envelope and the temporal golden corpus by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4185
* fix(api-slim): never import an observation citing a missing source unit by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4179
* fix(docker): drop unused libxml2 from the freethreaded runtime image by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4187
* feat(llm): route retain items to a chain member by their metadata by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4188
* fix(reflect): enforce max_tokens on the forced synthesis path too (#4156) by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4180
* fix(concurrency): serve CrossLoopSemaphore waiters in arrival order by @ebarkhordar in https://github.com/vectorize-io/hindsight/pull/4157
* fix(consolidation): teach the prompt to name delete targets, and count discarded batch responses by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4183
* test(temporal): re-snapshot the golden corpus for the "last weekend" fix by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4192
* fix(embeddings): bound embedding input by the model's context, prefix included by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4182
* chore(docker): move the image Node runtime from EOL 20 to Active LTS 24 by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4193
* fix(openclaw): fail the smoke test on any hindsight doctor diagnostic by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4190
* fix(api): 404 bank-scoped reads for a bank that does not exist (#4175) by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4186
* fix(coding-agents): read DSH transcript via snapshotEvents by @leilei3167 in https://github.com/vectorize-io/hindsight/pull/4148
* test(api-slim): regenerate the temporal golden corpus for the weekend fix by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4191
* ci: build the control plane on Node 24, matching the image by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4194
* fix(embeddings): send each Gemini input as its own Content by @Sanderhoff-alt in https://github.com/vectorize-io/hindsight/pull/4001
* fix(docker): stop installing curl into the cp-only image by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4199
* fix(docker): drop the NodeSource bootstrap from the standalone image by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4200
* fix(search): clamp future dates before the exponential recency power by @ebarkhordar in https://github.com/vectorize-io/hindsight/pull/4105
* feat(coding-agents): add Factory Droid harness by @mrwogu in https://github.com/vectorize-io/hindsight/pull/4011
* fix(local-ml): floor torch at 2.11.0 so arm64 images run on ARMv8.0 CPUs by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4201
* perf(api-slim): stop the mental-model staleness check walking the bank (#4169) by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4195
* feat(api,control-plane): a prompt tester for retain, and prompt preview for every operation by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4140
* fix(embeddings): one request per text for the Vertex single-content models by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4204
* perf(entity-resolver): optimize in-batch dedup via prefix filtering by @Sanderhoff-alt in https://github.com/vectorize-io/hindsight/pull/3991
* feat(coding-agents): spread page refreshes with hashed cron fields (`H`) by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4208
* fix(docker): drop curl from the API runtime images by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4202
* perf(config): stop deep-copying the global config on every resolution (#4209) by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4211
* perf(retain): accelerate within-batch semantic link calculation by @Sanderhoff-alt in https://github.com/vectorize-io/hindsight/pull/3977
* fix(coding-agents): replay a failed retain append instead of replacing the transcript (#3989) by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4210
* test(system): blackbox system-test suite driven only through the public API by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4212
* chore(deps): bump qs to 6.16.0 in the coding-agents lock by @cdbartholomew in https://github.com/vectorize-io/hindsight/pull/4220
* chore(deps): bump qs, @humanfs/node and postcss-selector-parser in the root lock by @cdbartholomew in https://github.com/vectorize-io/hindsight/pull/4219
* feat(profiling): env-configured CPU profile, reported to the logs by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4215
* fix(recall): report the caller's query_timestamp in the search trace by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4227
* fix(retain): give a split append the whole document as its body, not just the tail (#3989) by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4229
* docs: point the Slack community links at a redirect by @cdbartholomew in https://github.com/vectorize-io/hindsight/pull/4223
* fix: defer retain completion outbox until store commit by @kyletser in https://github.com/vectorize-io/hindsight/pull/4203
* fix(python-client): add the missing async twins to the convenience wrapper (#4221) by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4228
* perf(recall): stop building trace payloads when no trace was asked for by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4231
* feat(mental-models): default list to metadata; MCP list returns metadata only by @cdbartholomew in https://github.com/vectorize-io/hindsight/pull/4225
* fix(api): type the list and graph rows instead of returning bare dicts (#4218) by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4233
* fix(retain): a store-owned retain must not fail on its own log line by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4236
* perf(api): replace both BaseHTTPMiddleware with pure ASGI (3.2x on cheap routes) by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4235
* feat(extensions): add StaticKeysTenantExtension — env-configured per-user API keys with per-schema isolation by @rafaelkallis in https://github.com/vectorize-io/hindsight/pull/3675
* revert: drop free-threaded CPython 3.14 support (#4037, #4067) by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4234
* fix(api): expose the bank template import request body by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4247
* fix(reflect): say when the structured-output extraction failed (#4230) by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4248
* feat(coding-agents): refresh knowledge pages hourly and staggered by default by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4241
* feat(coding-agents): add ZCode as a supported harness (#4240) by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4258
* fix(retain): stop chunk ids colliding across banks by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4257
* chore(deps): update httpx2 and httpcore2 in the pydantic-ai integration by @cdbartholomew in https://github.com/vectorize-io/hindsight/pull/4262
* chore(deps): update sharp and vitest in the cloudflare-oauth-proxy integration by @cdbartholomew in https://github.com/vectorize-io/hindsight/pull/4263
* chore(deps): update js-yaml in the zapier integration by @cdbartholomew in https://github.com/vectorize-io/hindsight/pull/4264
* chore(deps): update npm dependencies in the root lockfile by @cdbartholomew in https://github.com/vectorize-io/hindsight/pull/4261
* chore(deps): update hono and vitest in the coding-agents integration by @cdbartholomew in https://github.com/vectorize-io/hindsight/pull/4266
* chore(deps): update vitest in the ai-sdk integration by @cdbartholomew in https://github.com/vectorize-io/hindsight/pull/4267
* chore(deps): update vitest in the chat integration by @cdbartholomew in https://github.com/vectorize-io/hindsight/pull/4268
* chore(deps): update vitest in the eliza integration by @cdbartholomew in https://github.com/vectorize-io/hindsight/pull/4269
* chore(deps): update vitest in the opencode integration by @cdbartholomew in https://github.com/vectorize-io/hindsight/pull/4271
* chore(deps): update vitest in the eve integration by @cdbartholomew in https://github.com/vectorize-io/hindsight/pull/4270
* chore(deps): update vitest in the flowise integration by @cdbartholomew in https://github.com/vectorize-io/hindsight/pull/4273
* chore(deps): update vitest in the obsidian integration by @cdbartholomew in https://github.com/vectorize-io/hindsight/pull/4275
* chore(deps): update vitest in the n8n integration by @cdbartholomew in https://github.com/vectorize-io/hindsight/pull/4274
* docs(documents): say the tags PATCH replaces the array, and test clearing it by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4272
* feat(api,control-plane): recall results carry the attachments behind each fact by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4277
* refactor(config): make HindsightConfig the only parser of HINDSIGHT_API_* env vars by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4260
* feat(control-plane): add a pause button for constellation ambient motion by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4289
* test(system): blackbox system-test coverage across the epic by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4216
* fix(reflect): uniquify tool_call ids so strict APIs accept the turn by @gwthm-in in https://github.com/vectorize-io/hindsight/pull/4250
* fix(curation): clear the legacy event_date when occurred_start is cleared by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4278
* feat(control-plane): pin the current bank to the top of the bank selector by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4298
* fix(entities): give mention_count back when the mentions go (#4291) by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4296
* fix(coding-agents): repair Grok config.toml left with an unmarked Hindsight block by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4302
* test(retain): make the post-commit convergence test causal, not a wall-clock race by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4294
* perf(db): skip asyncpg's release-time reset by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4259
* perf(recall): account for a recall's time per phase, and fix the three things that showed up by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4299
* fix(recall): a store-owned bank's attachment lookup does not read memory_units by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4306
* perf(recall): three CPU cuts on the recall path (audit serialization, phase sampling, on-loop query embedding) by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4314
* fix(coding-agents): record why an automatic reflect failed by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4316
* fix(api): declare binary download bodies so generated clients return bytes by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4315
* refactor: replace httpx and sync HTTP with aiohttp across production code by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4318
* test(system): the remaining epic stories, and two bugs they found by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4293
* fix(coding-agents): admit one codebase survey per bank, held by a heartbeat lease by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4303
* fix(reflect): grounding defects in reflect and knowledge-page delta refresh, plus system-evals by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4304
* feat(coding-agents): warn when the old Claude Code plugin is still installed by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4320
* feat(api): attachments on recall and read surfaces for store-owned banks by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4321
* feat(coding-agents): fall back to page search, then observation recall, when session reflect fails by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4324
* feat(coding-agents): record Hindsight tool usage and move logs to ~/.hindsight/coding-agents-logs by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4325
* chore(deps): update vitest and esbuild in the paperclip integration by @cdbartholomew in https://github.com/vectorize-io/hindsight/pull/4300
* chore(deps): update vitest in the openclaw integration by @cdbartholomew in https://github.com/vectorize-io/hindsight/pull/4301
* chore(deps): update adm-zip in the zapier integration by @cdbartholomew in https://github.com/vectorize-io/hindsight/pull/4322
* chore(deps): update js-yaml and vitest in the nemoclaw integration by @cdbartholomew in https://github.com/vectorize-io/hindsight/pull/4265
* feat(metrics): /metrics covers every worker (labelled api_worker), and event-loop lag as a histogram by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4319
* fix(coding-agents): keep the reflect fallback silent in the chat by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4354
* feat(api,clients): admission control with a bounded wait, and client retry by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4253
* feat(llm): per-member timeout and retry budget in a multi-LLM chain by @cdbartholomew in https://github.com/vectorize-io/hindsight/pull/4336
* chore(embed): re-sync the bundled env.example with the repo-root template by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4355
* fix(migrations): don't maintain memory_units or mental_models indexes under a custom memories store by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4326
* fix(profiling): arm the profiler in the workers, not only the supervisor by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4254
* chore(db): drop the unused memory_units_bm25 materialized view by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4357
* docs: changelog and blog post for v0.10.0 by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4245
* fix(docs): link the models page to configuration relatively, not via /docs/ by @nicoloboschi in https://github.com/vectorize-io/hindsight/pull/4361

## New Contributors
* @mameikagou made their first contribution in https://github.com/vectorize-io/hindsight/pull/3802
* @romanbsd made their first contribution in https://github.com/vectorize-io/hindsight/pull/3508
* @icculp made their first contribution in https://github.com/vectorize-io/hindsight/pull/3090
* @BrianHotopp made their first contribution in https://github.com/vectorize-io/hindsight/pull/3720
* @MasterST1337 made their first contribution in https://github.com/vectorize-io/hindsight/pull/3797
* @Adrastopoulos made their first contribution in https://github.com/vectorize-io/hindsight/pull/3801
* @aWN4Y25pa2EK made their first contribution in https://github.com/vectorize-io/hindsight/pull/3847
* @BrianMcBrayer made their first contribution in https://github.com/vectorize-io/hindsight/pull/3730
* @shauneccles made their first contribution in https://github.com/vectorize-io/hindsight/pull/3874
* @Sword-Saint69 made their first contribution in https://github.com/vectorize-io/hindsight/pull/3835
* @2anoubis made their first contribution in https://github.com/vectorize-io/hindsight/pull/3909
* @nickanderson made their first contribution in https://github.com/vectorize-io/hindsight/pull/3845
* @dwayn made their first contribution in https://github.com/vectorize-io/hindsight/pull/3804
* @etnperlong made their first contribution in https://github.com/vectorize-io/hindsight/pull/3843
* @zlguo1996 made their first contribution in https://github.com/vectorize-io/hindsight/pull/3910
* @jervaise made their first contribution in https://github.com/vectorize-io/hindsight/pull/3859
* @rschlek made their first contribution in https://github.com/vectorize-io/hindsight/pull/3960
* @aunitt made their first contribution in https://github.com/vectorize-io/hindsight/pull/3896
* @0xble made their first contribution in https://github.com/vectorize-io/hindsight/pull/4161
* @NgoQuocViet2001 made their first contribution in https://github.com/vectorize-io/hindsight/pull/4076
* @SharkyRawr made their first contribution in https://github.com/vectorize-io/hindsight/pull/4078
* @leilei3167 made their first contribution in https://github.com/vectorize-io/hindsight/pull/4148
* @mrwogu made their first contribution in https://github.com/vectorize-io/hindsight/pull/4011
* @kyletser made their first contribution in https://github.com/vectorize-io/hindsight/pull/4203
* @rafaelkallis made their first contribution in https://github.com/vectorize-io/hindsight/pull/3675
* @gwthm-in made their first contribution in https://github.com/vectorize-io/hindsight/pull/4250

**Full Changelog**: https://github.com/vectorize-io/hindsight/compare/v0.9.2...v0.10.0

Related Repositories