What's Changed
- docs: changelog and blog post for v0.8.6 by @nicoloboschi in #3051
- blog: Give GitHub Copilot CLI a memory of your codebase by @benfrank241 in #3055
- docs: add missing 0.8.6 changelog entries by @nicoloboschi in #3063
- docs: give the documents table its own section in the 0.8.6 blog post by @nicoloboschi in #3064
- feat(engine): pluggable memories storage backend by @nicoloboschi in #2917
- chore(deps): bump pg0-embedded to >=0.15.0 by @nicoloboschi in #3073
- feat(knowledge-base): client-managed knowledge pages, control-plane UI +
hindsight fsCLI by @nicoloboschi in #2455 - docs(hermes): deprecate standalone hindsight-hermes plugin (#3057) by @nicoloboschi in #3077
- feat(file-parser): support custom OCR headers by @Sanderhoff-alt in #3065
- feat(control-plane): show the coding agent's logo on documents and memories by @nicoloboschi in #3079
- fix(packaging): bundle licenses in Python distributions by @Sanderhoff-alt in #3067
- fix(consolidation): trigger mental model refresh on resolved scope, not the tags column (#3053) by @nicoloboschi in #3078
- fix(control-plane): knowledge-pages polish by @nicoloboschi in #3080
- fix(copilot-cli): parse Copilot CLI 1.0.76 native message transcript format by @benfrank241 in #3081
- blog(github-copilot): redate to 2026-07-30 by @benfrank241 in #3087
- feat(control-plane): a logo for every coding agent, not just five by @nicoloboschi in #3101
- feat(control-plane): badge documents an in-flight retain op is updating by @nicoloboschi in #3102
- fix(openclaw): default recall injection to user context by @Sanderhoff-alt in #3066
- feat(agent-sdk): let agent_knowledge_recall request source chunks by @chethanuk in #2995
- fix(engine): don't hold pooled DB connections across embedder/LLM calls (consolidation + mental model) by @nicoloboschi in #3082
- feat(openclaw): add preferObservations recall option (#2977) by @nicoloboschi in #3108
- fix(memory-engine): compute update_memory_unit embeddings off the pooled connection by @nicoloboschi in #3083
- fix(api): report the real last-write time on banks and documents by @nicoloboschi in #3109
- blog: How to Actually Evaluate an Agent-Memory System by @benfrank241 in #3106
- blog(evaluate-agent-memory): more contextual cover by @benfrank241 in #3117
- hindsight-coding-agents: harness-pluggable long-term memory for coding agents by @nicoloboschi in #2522
- docs(embed): document uvx cache growth and how to reclaim it (#2915) by @nicoloboschi in #3118
- feat(control-plane): refresh the UI design system by @nicoloboschi in #3149
- chore: replace broken star-history chart with self-hosted gh-stars by @nicoloboschi in #3150
- feat(llm): add
openai-responsesprovider (OpenAI Responses API) by @nicoloboschi in #3121 - docs(knowledge-pages): document Knowledge Pages and Mental Models, and manage them from the CLI by @nicoloboschi in #3151
- fix(recall): apply the created_after/created_before window to graph expansion by @nicoloboschi in #3153
- fix: render disallowed fields in config permission error message by @kubaodias in #3148
- fix(consolidation): apply sanitize_text to the _DedupDecision merge write path by @iRonin in #3144
- feat(mental-models): dry-run refresh and keep_trace for troubleshooting by @nicoloboschi in #3119
- feat(reflect,mental-models): surface structured output in the control plane by @nicoloboschi in #3113
- fix: return 422 for invalid recall fact types by @tao943 in #3062
- chore(api): drop the never-written memory_units.access_count column by @nicoloboschi in #3157
- docs(retain): deprecate bank name as narrator; steer speaker via context (#3138) by @nicoloboschi in #3155
- fix(recall): enforce the query token cap for internal recalls, not just HTTP by @nicoloboschi in #3158
- feat(config): per-operation llm_extra_body overrides by @nicoloboschi in #3159
- feat(embeddings): generic per-input token cap across all providers by @nicoloboschi in #3160
- fix(tei): retry embedding connect timeouts by @jooneyp in #3097
- fix(coding-agents): read Devin's transcript with node:sqlite, and refuse to install without it by @nicoloboschi in #3175
- docs(retain): suggest a distinct document_id per source document by @nicoloboschi in #3173
- fix(control-plane): report mental-model freshness from the bank write watermark by @nicoloboschi in #3156
- fix(retain): unify OutputTooLongError so #2579 output auto-split actually runs by @nicoloboschi in #3174
- chore(db): remove deprecated entity schema from memory_links by @nicoloboschi in #3177
- fix(retain): sync metadata to unchanged memories by @Sanderhoff-alt in #3011
- fix(recall): retry get_or_create_bank_profile on per-bank index deadlock by @dcbouius in #2984
- fix(consolidation): guard observation_history append on 0-row observation UPDATE by @nicoloboschi in #3161
- fix(config): report deleted import banks as conflicts by @Sanderhoff-alt in #3035
- feat(reranker): failover chain via indexed HINDSIGHT_API_RERANKER__* members by @nicoloboschi in #3176
- blog: Per-User Memory for AI Products — Multi-Tenant Patterns by @benfrank241 in #3180
- feat(obsidian): headless CLI vault ingestion (hindsight-obsidian-sync) by @benfrank241 in #3179
- perf(entity-resolution): skip fuzzy probing for exact-match-only label entities by @nicoloboschi in #3187
- feat(entity-resolution): configurable pg_trgm similarity threshold, applied at connection setup by @nicoloboschi in #3188
- fix(embeddings): honor query and document prompts locally by @jpmf33 in #3032
- feat(query-analyzer): configurable dateparser locale detection by @yufanw03 in #3154
- fix(mental-models): never overwrite a document with a delta-window candidate by @nicoloboschi in #3182
- fix(consolidation): keep observations in their source facts' language by @nicoloboschi in #3181
- fix(embed): bound daemon log growth by @koriyoshi2041 in #3165
- fix(llm): release concurrency permits during retry backoff by @koriyoshi2041 in #3145
- feat(recall): per-budget reranker candidate cap via env config (#3107) by @nicoloboschi in #3191
- fix(api): publish LabelGroup schema for entity_labels in OpenAPI (#3107) by @nicoloboschi in #3190
- fix(delete): sweep orphan entities when no relink victims were enqueued by @nicoloboschi in #3198
- fix(deps): make macOS installs work without a Rust toolchain by @nicoloboschi in #3199
- feat(coding-agents): local daemon mode, and pick the server at install time by @nicoloboschi in #3193
- fix: remove stale global memory_units vector index via migration; make reconcile hands-off by @nicoloboschi in #3204
- feat(templates): Hermes-branded bank templates, grounded in real Hermes user stories by @benfrank241 in #2996
- fix(entities): dedup same-batch entity variants via pg_trgm (#3107) by @nicoloboschi in #3197
- fix(maintenance): stop the scheduled mental-model refresh from enqueueing duplicates (#3210) by @nicoloboschi in #3212
- perf(entity-resolution): exclude label entities from the trigram fuzzy-match index by @nicoloboschi in #3214
- fix(retain): bound entity-resolution candidate scoring (#3211) by @nicoloboschi in #3213
- fix(litellm): keep macOS on litellm's last pure-python line (pip install is broken on Mac) by @cdbartholomew in #3224
- test(vector-index): resolve the repair migration's parent instead of branch@-1 by @nicoloboschi in #3238
- fix(worker): reconcile operations a worker still owns when it stops by @nicoloboschi in #3234
- fix(import): classify label entities when restoring a bank (#3236) by @nicoloboschi in #3237
- Harden outbound webhook delivery destinations and response handling by @nicoloboschi in #3239
- feat(coding-agents): carry the Codex plugin's endpoint over too by @nicoloboschi in #3203
- feat(coding-agents): stage the runtime so npx installs work by @nicoloboschi in #3241
- feat(recall): per-bank toggles for the temporal, graph, and rerank stages by @cdbartholomew in #3223
- feat(coding-agents): styled installer UI, arrow-key server picker, required Cloud token by @nicoloboschi in #3242
- docs(templates): recommend more integrations per template, not just Hermes by @benfrank241 in #3215
- docs: launch Coding Agents + mark the per-agent plugins superseded by @nicoloboschi in #3162
- Revert "chore(db): remove deprecated entity schema from memory_links" (#3177) by @nicoloboschi in #3244
New Contributors
- @tao943 made their first contribution in #3062
- @jooneyp made their first contribution in #3097
- @jpmf33 made their first contribution in #3032
- @yufanw03 made their first contribution in #3154
Full Changelog: v0.8.6...v0.9.0