github vectorize-io/hindsight v0.8.5

6 hours ago

What's Changed

  • docs: changelog and blog post for v0.8.4 by @nicoloboschi in #2474
  • fix(control-plane): show all mental models instead of capping at 100 by @nicoloboschi in #2512
  • fix(codex): implement strict_schema via forced tool call + repair invalid \escape (#2504) by @nicoloboschi in #2513
  • refactor(control-plane): drop the Graph view from memories by @nicoloboschi in #2517
  • Blog: Devin Desktop persistent memory (formerly Windsurf) by @benfrank241 in #2483
  • Update Devin Desktop blog cover image by @benfrank241 in #2524
  • fix(control-plane) fix json viewer unicode output display by @ymybxx in #2531
  • fix(control-plane): keep memory filters visible on empty results by @koriyoshi2041 in #2532
  • fix(curation): drop archive search_vector column, recompute on revert (#2503) by @nicoloboschi in #2514
  • feat(control-plane): animate the memories constellation & open memories in a dialog by @nicoloboschi in #2536
  • test(retain): fix missing llm_temperature_retain in _build_request_body mock by @nicoloboschi in #2537
  • Blog: architxt + Hindsight (Temporal Mosaic) — community post by @benfrank241 in #2526
  • feat(eve): auto-memory mode (v0.2.0) — no model tool-calling by @benfrank241 in #2527
  • feat(eve): retain the assistant reply by default by @benfrank241 in #2585
  • Blog: Eve automatic memory (hindsight-eve v0.2.0) by @benfrank241 in #2584
  • fix(agent-sdk): release recall token fix as 0.1.1 by @r266-tech in #2596
  • Refresh search vector on memory curation edits by @koriyoshi2041 in #2552
  • docs(eve): sync assistant reply default by @r266-tech in #2588
  • fix(parsers): coerce non-bytes buffers before the UTF-8 charset probe in markitdown by @cdbartholomew in #2586
  • fix(memory): return metadata from memory browse endpoints by @Sanderhoff-alt in #2583
  • fix(retain): preserve JSON chunks during output retry by @koriyoshi2041 in #2579
  • fix(api): let PATCH /memories clear occurred dates with null by @r266-tech in #2607
  • feat(integrations): add recall score floors by @ishanmalik in #2575
  • fix(opencode): install plugin SDK at runtime by @Sanderhoff-alt in #2574
  • fix(api): accept verbatim extraction mode in bank manifests by @ishanmalik in #2576
  • Fix chunk delete deadlock ordering by @oldnicke in #2570
  • feat(recall): add opt-in BM25 query term cap by @r266-tech in #2567
  • fix(control-plane): build local client before production build by @koriyoshi2041 in #2566
  • docs(skill): sync configuration reference for BM25 term cap by @benfrank241 in #2609
  • fix(consolidation): default invalid dedup actions to keep by @r266-tech in #2565
  • fix(cli): set default User-Agent header by @koriyoshi2041 in #2564
  • Fix _strip_code_fences truncating JSON when content contains inner backticks by @poog26 in #2563
  • fix(minimax): disable thinking by default by @koriyoshi2041 in #2558
  • feat(llm): recover outer JSON span when fence stripping yields non-JSON by @benfrank241 in #2610
  • refactor(zed): port setup CLI to Node, drop the Python dependency by @benfrank241 in #2599
  • Blog: Give Zed's AI Assistant a Persistent Memory by @benfrank241 in #2598
  • docs: add Oracle Database setup guide by @DK09876 in #2612
  • fix(oracle): don't await the synchronous cursor.close() in _set_session_schema by @DK09876 in #2613
  • docs(oracle): document required schema, embedding-dimension matching, and start-oracle re-run by @DK09876 in #2615
  • fix(worker): complete successful operations by @r266-tech in #2608
  • fix(ollama): make native num_ctx opt-in by @r266-tech in #2589
  • fix(recall): decouple temporal seed threshold by @Sanderhoff-alt in #2595
  • fix(reflect): tolerate null-like tool integer limits by @r266-tech in #2639
  • fix(claude-code): isolate MCP server cwd by @oldnicke in #2635
  • fix(claude-code): skip primary + duplicate banks in recallAdditionalBanks by @benfrank241 in #2625
  • Blog: Give Aider a Memory That Outlives the Session by @benfrank241 in #2642
  • feat(anthropic): prompt caching via inline cache_control markers by @hb-cam in #2629
  • feat(anthropic): implement the batch API interface via Message Batches (50% token discount) by @hb-cam in #2628
  • fix: handle FK violation in observation_history during parallel consolidation by @handnewb in #2620
  • fix(trace): skip LLM trace writes during daemon shutdown/pre-init races by @yingliang-zhang in #2618
  • fix(codex): send client identity headers for GPT-5.6 by @JiehoonKwak in #2647
  • Blog: One Memory, Three Surfaces (Cursor + OpenClaw + Vapi) by @benfrank241 in #2655
  • deps(security): require LiteLLM 1.84.0 by @r266-tech in #2651
  • fix(llm): raise OpenRouter Qwen3 verification budget by @r266-tech in #2633
  • fix(consolidation): normalize dedup action case/whitespace before validation by @iRonin in #2611
  • Include cookbook and integration docs in docs skill by @koriyoshi2041 in #2649
  • Accept top-level fact arrays in retain parsing by @koriyoshi2041 in #2556
  • fix(recall): scope entity fanout cap by fact type by @Sanderhoff-alt in #2681
  • Preserve document metadata during append retains by @koriyoshi2041 in #2684
  • fix(engine): clarify causal link compatibility by @Sanderhoff-alt in #2685
  • fix(control-plane): forward document search q to dataplane by @benfrank241 in #2687
  • fix(search): avoid year-0 crashes in Chinese rolling-window temporal extraction by @r266-tech in #2636
  • fix(control-plane): tag/scope filter resets during consolidation polling in data view by @viliusdidit in #2680
  • fix(recall): preserve combined graph activation scores by @Sanderhoff-alt in #2679
  • fix(consolidation): request JSON dedup decisions by @r266-tech in #2663
  • fix(migrations): install public maintenance routines on non-public schema runs by @benfrank241 in #2690
  • Blog: Inside retain() — What Happens When Your Agent Remembers by @benfrank241 in #2689
  • feat(devin-desktop): two-tier bank scoping + visible memory use (v0.2.0) by @DK09876 in #2692
  • fix(worker): bound terminal operation history by @Tosko4 in #2708
  • Fix Codex OAuth refresh sharing across managers by @koriyoshi2041 in #2706
  • fix(claude-code): surface the CLI's real error text on is_error results by @ElanHasson in #2703
  • Avoid slim embedded daemon startup without local ML deps by @koriyoshi2041 in #2676
  • fix(claude-code): retain session deltas by @oldnicke in #2648
  • docs(embed): expose local CPU workarounds by @yingliang-zhang in #2707
  • fix(control-plane): show bank name (fallback bank_id) in bank selector by @benfrank241 in #2693
  • fix(test): green main — update Oracle session-schema tests for #2708 reset behavior by @benfrank241 in #2722
  • fix(retain): recover recoverable batch-extraction JSON instead of dropping facts by @benfrank241 in #2720
  • fix(gemini): grammar-enforce batch structured output regardless of strict flag by @benfrank241 in #2719
  • fix reranker heap release after local scoring by @oldnicke in #2530
  • fix(embed): green main — use --target sibling binary unconditionally (#2676 vs #1240) by @benfrank241 in #2723
  • feat(retain): optional fail-on-extraction-errors flag (issue #2700) by @benfrank241 in #2721
  • fix: coerce non-string metadata values to strings in MemoryFact.parse_metadata by @handnewb in #2623
  • fix(openclaw): gate append retention on stored text by @xmh1011 in #2511
  • Blog: Give Every Agent You Run in Omnigent a Persistent Memory by @benfrank241 in #2709
  • docs: Add Omnigent integration page by @benfrank241 in #2710
  • chore(deps): bump langsmith and ws (security) by @dcbouius in #2743
  • chore(deps): migrate pipecat integration to pipecat-ai 1.x (clears 4 high-severity alerts) by @dcbouius in #2380
  • docs: fix conversation-scoped bank claim in Omnigent post by @benfrank241 in #2748
  • chore(deps): npm transitive pins (1 critical + mediums) and pydantic-ai-slim by @dcbouius in #2751
  • blog: One Bank or Many? A Field Guide to Structuring Agent Memory by @benfrank241 in #2747
  • fix(reflect): keep horizontal rules inside fenced code blocks by @ebarkhordar in #2755
  • fix(entity-resolver): keep every co-occurrence pair when canonicalising order by @ebarkhordar in #2750
  • fix(test): seed torch._inductor.test_operators to fix test-api shard failures by @dcbouius in #2761
  • test(fact-extraction): stop judging phrasing/attribution the system already captures by @dcbouius in #2769
  • fix(reflect): pair each expanded memory_id with its own memory by @ebarkhordar in #2759
  • fix(openai): record cached and reasoning tokens on the LLM metrics counters by @ebarkhordar in #2758
  • fix(reflect): preserve bank attribution in provider calls by @Jordan-Jarvis in #2764
  • fix(embed): defer provider credential validation by @oldnicke in #2746
  • fix(api): decode memory observation scopes by @Jordan-Jarvis in #2735
  • test(openrouter): set cached-token fields in mock to stop intermittent MagicMock crash by @dcbouius in #2776
  • chore(deps): bump pydantic-settings, transformers, soupsieve (security) by @dcbouius in #2727
  • chore(deps): bump mcp to 1.28.1 (clears 20 high-severity MCP SDK alerts) by @dcbouius in #2782
  • docs(guides): add 44 integration memory guides by @benfrank241 in #2778
  • blog: The Fully Open Agent Memory Stack (Hermes + Hindsight) by @benfrank241 in #2771
  • perf+fix(graph-maintenance): catch the #2529 sweep deadlock in continuous perf, and drive dropped passes to zero by @nicoloboschi in #2534
  • fix(embeddings): truncate oversized litellm-sdk inputs before embedding (#2501) by @nicoloboschi in #2516
  • fix(mcp): prevent get_bank from creating banks by @Sanderhoff-alt in #2393
  • feat(auth): add create bank validation hook by @Sanderhoff-alt in #2395
  • chore: remove stray local state files by @Sanderhoff-alt in #2472
  • feat(reflect): step-by-step context caching for the Gemini tool loop by @nicoloboschi in #2540
  • fix(search): include proof_count in temporal spreading SQL SELECT by @Srujan-rai in #2479
  • fix(reflect): thread max_completion_tokens into the structured-output extraction call (#2431) by @r266-tech in #2486
  • docs(cli): describe explore memory detail view by @koriyoshi2041 in #2497
  • revert(docs-skill): drop cookbook pages from the docs skill bundle by @nicoloboschi in #2818
  • fix(control-plane): clear mental-model tags when the edit field is emptied (#2507) by @nicolas-vivot in #2508
  • revert(migrations): drop advisory-lock maintenance-routines install (#2690) by @nicoloboschi in #2817
  • fix(migrations): install maintenance routines into each run's own schema by @nicoloboschi in #2820
  • perf(graph-maintenance): prune stale cooccurrences via INTERSECT, not a self-join (7.1x, 289x fewer buffers) by @sergattic in #2473
  • style: apply ruff format to reflect/agent.py by @nicoloboschi in #2822
  • feat(config): optional cap on planner parallelism for pool connections by @cdbartholomew in #2600
  • feat(api): enrich refresh_mental_model result_metadata with semantic outcome by @hb-cam in #2627
  • fix(trace): gate LLM trace writes on backend lifecycle, not error strings (reverts #2618) by @nicoloboschi in #2821
  • feat(anthropic): carry the prompt-cache marker on batch system prompts by @hb-cam in #2652
  • fix(recall): remove unused graph seed inputs by @Sanderhoff-alt in #2683
  • fix(engine): consolidate duplicated engine definitions by @Sanderhoff-alt in #2691
  • docs(retain): correct entity resolution (no nickname resolution) by @benfrank241 in #2694
  • fix(migrations): install the maintenance routines once, in the configured schema by @nicoloboschi in #2824
  • fix(engine): isolate operation completion from best-effort side-effects by @nicoloboschi in #2823
  • fix(reflect): preserve required tools for custom OpenAI endpoints by @Jordan-Jarvis in #2734
  • fix(migrations): preserve percent-encoded database URLs by @Jordan-Jarvis in #2733
  • fix(ci): avoid rebuilding docs in verify-generated-files by @Sanderhoff-alt in #2739
  • feat(api): attribute remote reranker calls by bank by @Jordan-Jarvis in #2740
  • fix(reflect): cap done tool answers by @Sanjays2402 in #2757
  • Fix day+month+year dates collapsing to the whole month by @dimonnld in #2791
  • feat(zcode): add Hindsight long-term memory integration for ZCode by @benfrank241 in #2549
  • fix(query-analyzer): pick strongest dateparser match, not the leftmost (#2768) by @benfrank241 in #2772
  • fix(retain): reject degenerate fact text before storage (#2520) by @handnewb in #2794
  • fix(audit): add missing @Audited decorator to api_update_memory by @handnewb in #2798
  • fix(retain): make lazy bank creation atomic (#2695) by @ijevin in #2802
  • fix(db): re-apply session GUCs on pool acquire (asyncpg RESET ALL wipes them) by @sireika in #2815
  • feat(pg0): carry optional user/password in pg0:// URLs by @nicoloboschi in #2832
  • test(recall): stop passing removed semantic_seeds into link expansion by @nicoloboschi in #2829
  • fix(retain): make entities a plain list of strings (#2749) by @nicoloboschi in #2830
  • fix(worker): discover expired-operation schemas in one query, default retention off by @nicoloboschi in #2819
  • blog: Persistent memory for ZCode (Z.ai GLM coding agent) by @benfrank241 in #2838
  • fix: remove vulnerable API runtime packages by @Jordan-Jarvis in #2851
  • chore(db): remove the dead advisory_lock dialect helper by @nicoloboschi in #2855
  • feat: add tags filtering to list_memories / list_memory_units by @superafun in #2848
  • fix: disable built-in tools in ClaudeCodeLLM.call() to prevent ToolSearch deferral eating max_turns=1 by @peter216 in #2850
  • fix(memory): preserve bank attribution during curation by @Jordan-Jarvis in #2847
  • fix(llm): emit OpenAI strict JSON schemas by @Jordan-Jarvis in #2845
  • feat(audit): make audit_log_enabled overridable per bank by @nicoloboschi in #2827
  • fix(retain): reassert resolved entities before linking units (#2662) by @nicoloboschi in #2859
  • fix(pg0): honor URL credentials during MemoryEngine startup by @r266-tech in #2836
  • chore(deps): bump nltk to 3.10.0 (clears 2 high-severity path-traversal alerts) by @dcbouius in #2833
  • fix(retain): preserve fact alignment when filtering degenerate text by @r266-tech in #2846
  • Per-operation strict schema for consolidation by @nicoloboschi in #2825
  • fix(#2808): make mental model tags_match configurable on all creation surfaces (MCP, TS client, CLI) by @nicoloboschi in #2858
  • fix(mental-models): align stale checks with refresh tag scope by @r266-tech in #2804
  • fix(retain): a zero retry budget must still perform the initial fact-extraction request by @chethanuk in #2779
  • fix(integrations): keep auto-managed Hindsight daemons working on Python 3.14 hosts by @r266-tech in #2801
  • fix(opencode): derive session-start recall query from user messages (#2856) by @nicoloboschi in #2860
  • fix(docker): build official images from the committed workspace lock by @r266-tech in #2789
  • feat(api): allow deleting terminal bank operations with control-plane support by @chethanuk in #2777
  • fix(transfer): preserve JSONB and timestamp provenance by @Korayem in #2717
  • fix(worker): count crash-recovery attempts toward max-retry budget (#2675) by @handnewb in #2834
  • fix(retain): queue retain.completed webhook on boundary and zero-fact batches by @nicoloboschi in #2861
  • fix(reflect): emit canonical OpenAI tool result messages by @Jordan-Jarvis in #2844
  • fix: advance watermark after no-op delta refresh by @SunneeYang in #2866
  • fix(cli): sync regenerated OpenAPI operation changes by @Sanderhoff-alt in #2867
  • feat(llm): opt-in 4xx request-dump for diagnosing rejected calls (all providers) by @nicoloboschi in #2865
  • fix(docs): sync generated documentation skill by @Sanderhoff-alt in #2870
  • fix(vector-index): repair per-bank index coverage after restore/upgrade (#2645) by @nicoloboschi in #2872
  • refactor(llm): type provider tool choices by @Jordan-Jarvis in #2843
  • fix(llm): recover malformed JSON via json_repair (last-resort parse fallback) by @nicoloboschi in #2871
  • chore(deps): pin adm-zip >=0.6.0 in zapier (clears last fixable high alert) by @dcbouius in #2880
  • blog: Make Thinking Machines' Inkling your agent's memory (tutorial) by @benfrank241 in #2882

New Contributors

Full Changelog: v0.8.4...v0.8.5

Don't miss a new hindsight release

NewReleases is sending notifications on new releases.