diff --git a/hindsight-docs/docs/sdks/integrations/ai-sdk.mdx b/hindsight-docs/docs/sdks/integrations/ai-sdk.mdx index 0f9ee62b..f098074a 100644 --- a/hindsight-docs/docs/sdks/integrations/ai-sdk.mdx +++ b/hindsight-docs/docs/sdks/integrations/ai-sdk.mdx @@ -6,6 +6,8 @@ sidebar_position: 4 The `@vectorize-io/hindsight-ai-sdk` package integrates [Hindsight](https://hindsight.vectorize.io) memory with the [Vercel AI SDK](https://ai-sdk.dev). It provides five ready-to-use tools for retaining, recalling, and reflecting on long-term memories. +[View Changelog →](/changelog/integrations/ai-sdk) + import CodeSnippet from '@site/src/components/CodeSnippet'; import aiSdkTs from '!!raw-loader!@site/examples/integrations/ai-sdk.ts'; diff --git a/hindsight-docs/docs/sdks/integrations/chat.md b/hindsight-docs/docs/sdks/integrations/chat.md index a35b3b18..027d66b3 100644 --- a/hindsight-docs/docs/sdks/integrations/chat.md +++ b/hindsight-docs/docs/sdks/integrations/chat.md @@ -6,6 +6,8 @@ sidebar_position: 5 We built `@vectorize-io/hindsight-chat` to give [Vercel Chat SDK](https://github.com/vercel/chat) bots persistent, per-user memory with a single handler wrapper. The integration works across Slack, Discord, Teams, Google Chat, GitHub, and Linear — no custom plumbing required. +[View Changelog →](/changelog/integrations/chat) + ## Installation ```bash diff --git a/hindsight-docs/docs/sdks/integrations/crewai.md b/hindsight-docs/docs/sdks/integrations/crewai.md index 33b28b1e..4169f971 100644 --- a/hindsight-docs/docs/sdks/integrations/crewai.md +++ b/hindsight-docs/docs/sdks/integrations/crewai.md @@ -6,6 +6,8 @@ sidebar_position: 5 Persistent memory for AI agent crews via [CrewAI](https://github.com/crewAIInc/crewAI). Give your crews long-term memory with fact extraction, entity tracking, and temporal awareness. +[View Changelog →](/changelog/integrations/crewai) + ## Features - **Drop-in Storage Backend** - Implements CrewAI's `Storage` interface for `ExternalMemory` diff --git a/hindsight-docs/docs/sdks/integrations/langgraph.md b/hindsight-docs/docs/sdks/integrations/langgraph.md index 582fbc34..2cda46c7 100644 --- a/hindsight-docs/docs/sdks/integrations/langgraph.md +++ b/hindsight-docs/docs/sdks/integrations/langgraph.md @@ -6,6 +6,8 @@ sidebar_position: 7 Persistent long-term memory for [LangGraph](https://langchain-ai.github.io/langgraph/) and [LangChain](https://python.langchain.com/) agents via Hindsight. Three integration patterns at different abstraction levels — the tools pattern works with both LangChain and LangGraph, while nodes and the BaseStore adapter are LangGraph-specific. +[View Changelog →](/changelog/integrations/langgraph) + ## Features - **Memory Tools** — retain, recall, and reflect as LangChain `@tool` functions compatible with `bind_tools()` and `ToolNode`. Works with **both LangChain and LangGraph** — no LangGraph dependency required for this pattern. diff --git a/hindsight-docs/docs/sdks/integrations/litellm.md b/hindsight-docs/docs/sdks/integrations/litellm.md index 31ecbcde..9a22d89c 100644 --- a/hindsight-docs/docs/sdks/integrations/litellm.md +++ b/hindsight-docs/docs/sdks/integrations/litellm.md @@ -6,6 +6,8 @@ sidebar_position: 1 Universal LLM memory integration via [LiteLLM](https://github.com/BerriAI/litellm). Add persistent memory to any LLM application with just a few lines of code. +[View Changelog →](/changelog/integrations/litellm) + ## Features - **Universal LLM Support** - Works with 100+ LLM providers via LiteLLM (OpenAI, Anthropic, Groq, Azure, AWS Bedrock, Google Vertex AI, and more) diff --git a/hindsight-docs/docs/sdks/integrations/nemoclaw.md b/hindsight-docs/docs/sdks/integrations/nemoclaw.md index a56e132a..68105526 100644 --- a/hindsight-docs/docs/sdks/integrations/nemoclaw.md +++ b/hindsight-docs/docs/sdks/integrations/nemoclaw.md @@ -8,6 +8,8 @@ Persistent memory for [NemoClaw](https://nemoclaw.ai) sandboxed agents using [Hi NemoClaw runs [OpenClaw](https://openclaw.ai) inside an OpenShell sandbox with controlled filesystem, process, and network egress policies. The `hindsight-nemoclaw` package automates adding Hindsight memory to a sandbox in one command — no code changes required. +[View Changelog →](/changelog/integrations/nemoclaw) + ## Quick Start ```bash diff --git a/hindsight-docs/docs/sdks/integrations/openclaw.md b/hindsight-docs/docs/sdks/integrations/openclaw.md index cd894c7d..ae5c8c20 100644 --- a/hindsight-docs/docs/sdks/integrations/openclaw.md +++ b/hindsight-docs/docs/sdks/integrations/openclaw.md @@ -8,6 +8,8 @@ Local, long term memory for [OpenClaw](https://openclaw.ai) agents using [Hindsi This plugin integrates [hindsight-embed](https://vectorize.io/hindsight/cli), a standalone daemon that bundles Hindsight's memory engine (API + PostgreSQL) into a single command. Everything runs locally on your machine, reuses the LLM you're already paying for, and costs nothing extra. +[View Changelog →](/changelog/integrations/openclaw) + ## Quick Start **Step 1: Set up LLM for memory extraction** diff --git a/hindsight-docs/docs/sdks/integrations/pydantic-ai.md b/hindsight-docs/docs/sdks/integrations/pydantic-ai.md index 8f6e6baa..4b1c2e24 100644 --- a/hindsight-docs/docs/sdks/integrations/pydantic-ai.md +++ b/hindsight-docs/docs/sdks/integrations/pydantic-ai.md @@ -6,6 +6,8 @@ sidebar_position: 6 Persistent memory tools for [Pydantic AI](https://ai.pydantic.dev/) agents via Hindsight. Give your agents long-term memory with retain, recall, and reflect — all async-native with no thread-pool hacks. +[View Changelog →](/changelog/integrations/pydantic-ai) + ## Features - **Async-Native Tools** — Uses Pydantic AI's async tool interface directly (`aretain`, `arecall`, `areflect`) diff --git a/hindsight-docs/sidebars.ts b/hindsight-docs/sidebars.ts index fe807ed8..62353d84 100644 --- a/hindsight-docs/sidebars.ts +++ b/hindsight-docs/sidebars.ts @@ -232,6 +232,12 @@ const sidebars: SidebarsConfig = { label: 'LangGraph / LangChain', customProps: { icon: '/img/icons/langgraph.png' }, }, + { + type: 'doc', + id: 'sdks/integrations/nemoclaw', + label: 'NemoClaw', + customProps: { icon: '/img/icons/nemoclaw.png' }, + }, { type: 'doc', id: 'sdks/integrations/skills', diff --git a/hindsight-docs/src/data/integrations.json b/hindsight-docs/src/data/integrations.json index 2c11d969..f22a5cdd 100644 --- a/hindsight-docs/src/data/integrations.json +++ b/hindsight-docs/src/data/integrations.json @@ -100,6 +100,26 @@ "link": "/sdks/integrations/skills", "icon": "/img/icons/skills.png" }, + { + "id": "langgraph", + "name": "LangGraph / LangChain", + "description": "Add persistent memory to LangGraph and LangChain agents. Supports Memory Tools, Graph Nodes, and BaseStore adapter patterns.", + "type": "official", + "by": "hindsight", + "category": "framework", + "link": "/sdks/integrations/langgraph", + "icon": "/img/icons/langgraph.png" + }, + { + "id": "nemoclaw", + "name": "NemoClaw", + "description": "Persistent memory for NemoClaw sandboxed agents. One-command setup — no code changes required.", + "type": "official", + "by": "hindsight", + "category": "framework", + "link": "/sdks/integrations/nemoclaw", + "icon": "/img/icons/nemoclaw.png" + }, { "id": "hindsight-openclaw-pro", "name": "hindsight-openclaw-pro", diff --git a/hindsight-docs/src/pages/changelog/integrations/ai-sdk.md b/hindsight-docs/src/pages/changelog/integrations/ai-sdk.md index 2587c960..ac8eb1bf 100644 --- a/hindsight-docs/src/pages/changelog/integrations/ai-sdk.md +++ b/hindsight-docs/src/pages/changelog/integrations/ai-sdk.md @@ -2,10 +2,8 @@ hide_table_of_contents: true --- -# AI SDK Integration Changelog +import PageHero from '@site/src/components/PageHero'; -Changelog for [`@vectorize-io/hindsight-ai-sdk`](https://www.npmjs.com/package/@vectorize-io/hindsight-ai-sdk) — memory integration for Vercel AI SDK. + -For the source code, see [`hindsight-integrations/ai-sdk`](https://github.com/vectorize-io/hindsight/tree/main/hindsight-integrations/ai-sdk). - -← [Back to main changelog](/changelog) +[← Vercel AI SDK integration](/sdks/integrations/ai-sdk) diff --git a/hindsight-docs/src/pages/changelog/integrations/chat.md b/hindsight-docs/src/pages/changelog/integrations/chat.md index 6311de48..dc58b8ba 100644 --- a/hindsight-docs/src/pages/changelog/integrations/chat.md +++ b/hindsight-docs/src/pages/changelog/integrations/chat.md @@ -2,10 +2,8 @@ hide_table_of_contents: true --- -# Chat SDK Integration Changelog +import PageHero from '@site/src/components/PageHero'; -Changelog for [`@vectorize-io/hindsight-chat`](https://www.npmjs.com/package/@vectorize-io/hindsight-chat) — memory integration for Vercel Chat SDK. + -For the source code, see [`hindsight-integrations/chat`](https://github.com/vectorize-io/hindsight/tree/main/hindsight-integrations/chat). - -← [Back to main changelog](/changelog) +[← Vercel Chat SDK integration](/sdks/integrations/chat) diff --git a/hindsight-docs/src/pages/changelog/integrations/crewai.md b/hindsight-docs/src/pages/changelog/integrations/crewai.md index 1bf3fba4..68626b9f 100644 --- a/hindsight-docs/src/pages/changelog/integrations/crewai.md +++ b/hindsight-docs/src/pages/changelog/integrations/crewai.md @@ -2,10 +2,8 @@ hide_table_of_contents: true --- -# CrewAI Integration Changelog +import PageHero from '@site/src/components/PageHero'; -Changelog for [`hindsight-crewai`](https://pypi.org/project/hindsight-crewai/) — persistent memory for CrewAI agents. + -For the source code, see [`hindsight-integrations/crewai`](https://github.com/vectorize-io/hindsight/tree/main/hindsight-integrations/crewai). - -← [Back to main changelog](/changelog) +[← CrewAI integration](/sdks/integrations/crewai) diff --git a/hindsight-docs/src/pages/changelog/integrations/langgraph.md b/hindsight-docs/src/pages/changelog/integrations/langgraph.md index a9874d53..1cbf7e9d 100644 --- a/hindsight-docs/src/pages/changelog/integrations/langgraph.md +++ b/hindsight-docs/src/pages/changelog/integrations/langgraph.md @@ -2,13 +2,11 @@ hide_table_of_contents: true --- -# LangGraph Integration Changelog +import PageHero from '@site/src/components/PageHero'; -Changelog for [`hindsight-langgraph`](https://pypi.org/project/hindsight-langgraph/) — LangGraph memory integration with tools, nodes, and store patterns. + -For the source code, see [`hindsight-integrations/langgraph`](https://github.com/vectorize-io/hindsight/tree/main/hindsight-integrations/langgraph). - -← [Back to main changelog](/changelog) +[← LangGraph integration](/sdks/integrations/langgraph) ## [0.1.1](https://github.com/vectorize-io/hindsight/tree/integrations/langgraph/v0.1.1) diff --git a/hindsight-docs/src/pages/changelog/integrations/litellm.md b/hindsight-docs/src/pages/changelog/integrations/litellm.md index f0090c3b..aea667e4 100644 --- a/hindsight-docs/src/pages/changelog/integrations/litellm.md +++ b/hindsight-docs/src/pages/changelog/integrations/litellm.md @@ -2,10 +2,8 @@ hide_table_of_contents: true --- -# LiteLLM Integration Changelog +import PageHero from '@site/src/components/PageHero'; -Changelog for [`hindsight-litellm`](https://pypi.org/project/hindsight-litellm/) — universal LLM memory integration via LiteLLM. + -For the source code, see [`hindsight-integrations/litellm`](https://github.com/vectorize-io/hindsight/tree/main/hindsight-integrations/litellm). - -← [Back to main changelog](/changelog) +[← LiteLLM integration](/sdks/integrations/litellm) diff --git a/hindsight-docs/src/pages/changelog/integrations/nemoclaw.md b/hindsight-docs/src/pages/changelog/integrations/nemoclaw.md index ff71016a..73edaab2 100644 --- a/hindsight-docs/src/pages/changelog/integrations/nemoclaw.md +++ b/hindsight-docs/src/pages/changelog/integrations/nemoclaw.md @@ -2,13 +2,11 @@ hide_table_of_contents: true --- -# NemoClaw Integration Changelog +import PageHero from '@site/src/components/PageHero'; -Changelog for [`@vectorize-io/hindsight-nemoclaw`](https://www.npmjs.com/package/@vectorize-io/hindsight-nemoclaw). + -For the source code, see [`hindsight-integrations/nemoclaw`](https://github.com/vectorize-io/hindsight/tree/main/hindsight-integrations/nemoclaw). - -← [Back to main changelog](/changelog) +[← NemoClaw integration](/sdks/integrations/nemoclaw) ## [0.1.1](https://github.com/vectorize-io/hindsight/tree/integrations/nemoclaw/v0.1.1) diff --git a/hindsight-docs/src/pages/changelog/integrations/openclaw.md b/hindsight-docs/src/pages/changelog/integrations/openclaw.md index 1208d2c1..bf7dd681 100644 --- a/hindsight-docs/src/pages/changelog/integrations/openclaw.md +++ b/hindsight-docs/src/pages/changelog/integrations/openclaw.md @@ -2,10 +2,8 @@ hide_table_of_contents: true --- -# OpenClaw Integration Changelog +import PageHero from '@site/src/components/PageHero'; -Changelog for [`@vectorize-io/hindsight-openclaw`](https://www.npmjs.com/package/@vectorize-io/hindsight-openclaw) — Hindsight memory plugin for OpenClaw. + -For the source code, see [`hindsight-integrations/openclaw`](https://github.com/vectorize-io/hindsight/tree/main/hindsight-integrations/openclaw). - -← [Back to main changelog](/changelog) +[← OpenClaw integration](/sdks/integrations/openclaw) diff --git a/hindsight-docs/src/pages/changelog/integrations/pydantic-ai.md b/hindsight-docs/src/pages/changelog/integrations/pydantic-ai.md index 6a779c8b..c7b109aa 100644 --- a/hindsight-docs/src/pages/changelog/integrations/pydantic-ai.md +++ b/hindsight-docs/src/pages/changelog/integrations/pydantic-ai.md @@ -2,10 +2,8 @@ hide_table_of_contents: true --- -# Pydantic AI Integration Changelog +import PageHero from '@site/src/components/PageHero'; -Changelog for [`hindsight-pydantic-ai`](https://pypi.org/project/hindsight-pydantic-ai/) — persistent memory tools for Pydantic AI agents. + -For the source code, see [`hindsight-integrations/pydantic-ai`](https://github.com/vectorize-io/hindsight/tree/main/hindsight-integrations/pydantic-ai). - -← [Back to main changelog](/changelog) +[← Pydantic AI integration](/sdks/integrations/pydantic-ai) diff --git a/hindsight-docs/static/img/icons/langgraph.png b/hindsight-docs/static/img/icons/langgraph.png new file mode 100644 index 00000000..d11b35ac Binary files /dev/null and b/hindsight-docs/static/img/icons/langgraph.png differ diff --git a/hindsight-docs/static/img/icons/nemoclaw.png b/hindsight-docs/static/img/icons/nemoclaw.png new file mode 100644 index 00000000..04390f2f Binary files /dev/null and b/hindsight-docs/static/img/icons/nemoclaw.png differ diff --git a/hindsight-docs/versioned_docs/version-0.4/developer/api/documents.mdx b/hindsight-docs/versioned_docs/version-0.4/developer/api/documents.mdx index cbbc5a13..d73acad6 100644 --- a/hindsight-docs/versioned_docs/version-0.4/developer/api/documents.mdx +++ b/hindsight-docs/versioned_docs/version-0.4/developer/api/documents.mdx @@ -13,6 +13,7 @@ import CodeSnippet from '@site/src/components/CodeSnippet'; {/* Import raw source files */} import documentsPy from '!!raw-loader!@site/examples/api/documents.py'; import documentsMjs from '!!raw-loader!@site/examples/api/documents.mjs'; +import documentsGo from '!!raw-loader!@site/examples/api/documents.go'; :::tip Prerequisites Make sure you've completed the [Quick Start](./quickstart) and understand [how retain works](./retain). @@ -60,6 +61,9 @@ hindsight memory retain my-bank "Meeting notes content..." --doc-id notes-2024-0 hindsight memory retain-files my-bank docs/ ``` + + + @@ -84,6 +88,9 @@ hindsight memory retain my-bank "Project deadline: March 31" --doc-id project-pl hindsight memory retain my-bank "Project deadline: April 15 (extended)" --doc-id project-plan ``` + + + @@ -104,6 +111,9 @@ Retrieve a document's original text and metadata. This is useful for expanding d hindsight document get my-bank meeting-2024-03-15 ``` + + + @@ -128,6 +138,9 @@ hindsight document update-tags my-bank meeting-2024-03-15 --tags team-a --tags t hindsight document update-tags my-bank meeting-2024-03-15 ``` + + + @@ -152,6 +165,9 @@ Remove a document and all its associated memories: hindsight document delete my-bank meeting-2024-03-15 ``` + + + @@ -183,6 +199,9 @@ hindsight document list my-bank --q report hindsight document list my-bank --tags team-a --tags team-b ``` + + + diff --git a/hindsight-docs/versioned_docs/version-0.4/developer/api/main-methods.mdx b/hindsight-docs/versioned_docs/version-0.4/developer/api/main-methods.mdx index b7d2d760..1cc3eb26 100644 --- a/hindsight-docs/versioned_docs/version-0.4/developer/api/main-methods.mdx +++ b/hindsight-docs/versioned_docs/version-0.4/developer/api/main-methods.mdx @@ -13,6 +13,7 @@ import CodeSnippet from '@site/src/components/CodeSnippet'; {/* Import raw source files */} import mainMethodsPy from '!!raw-loader!@site/examples/api/main-methods.py'; import mainMethodsMjs from '!!raw-loader!@site/examples/api/main-methods.mjs'; +import mainMethodsGo from '!!raw-loader!@site/examples/api/main-methods.go'; :::tip Prerequisites Make sure you've [installed Hindsight](../installation) and completed the [Quick Start](./quickstart). @@ -33,15 +34,18 @@ Store conversations, documents, and facts into a memory bank. ```bash # Store a single fact -hindsight retain my-bank "Alice joined Google in March 2024 as a Senior ML Engineer" +hindsight memory retain my-bank "Alice joined Google in March 2024 as a Senior ML Engineer" # Store from a file -hindsight retain my-bank --file conversation.txt --context "Daily standup" +hindsight memory retain-files my-bank conversation.txt --context "Daily standup" # Store multiple files -hindsight retain my-bank --files docs/*.md +hindsight memory retain-files my-bank docs/ ``` + + + @@ -66,18 +70,21 @@ Search for relevant memories using multi-strategy retrieval. ```bash # Basic search -hindsight recall my-bank "What does Alice do at Google?" +hindsight memory recall my-bank "What does Alice do at Google?" # Search with options -hindsight recall my-bank "What happened last spring?" \ +hindsight memory recall my-bank "What happened last spring?" \ --budget high \ --max-tokens 8192 \ - --fact-type world + --fact-type world,experience -# Verbose output (shows weights and sources) -hindsight recall my-bank "Tell me about Alice" -v +# Verbose output +hindsight memory recall my-bank "Tell me about Alice" -v ``` + + + @@ -102,15 +109,15 @@ Generate disposition-aware responses using memories and observations. ```bash # Basic reflect -hindsight reflect my-bank "Should we adopt TypeScript for our backend?" - -# Verbose output (shows sources and observations) -hindsight reflect my-bank "What are Alice's strengths for the team lead role?" -v +hindsight memory reflect my-bank "Should we adopt TypeScript for our backend?" # With higher reasoning budget -hindsight reflect my-bank "Analyze our tech stack" --budget high +hindsight memory reflect my-bank "Analyze our tech stack" --budget high ``` + + + diff --git a/hindsight-docs/versioned_docs/version-0.4/developer/api/memory-banks.mdx b/hindsight-docs/versioned_docs/version-0.4/developer/api/memory-banks.mdx index 0ff99fca..17b85f55 100644 --- a/hindsight-docs/versioned_docs/version-0.4/developer/api/memory-banks.mdx +++ b/hindsight-docs/versioned_docs/version-0.4/developer/api/memory-banks.mdx @@ -13,8 +13,12 @@ import CodeSnippet from '@site/src/components/CodeSnippet'; {/* Import raw source files */} import memoryBanksPy from '!!raw-loader!@site/examples/api/memory-banks.py'; import memoryBanksMjs from '!!raw-loader!@site/examples/api/memory-banks.mjs'; +import memoryBanksSh from '!!raw-loader!@site/examples/api/memory-banks.sh'; +import memoryBanksGo from '!!raw-loader!@site/examples/api/memory-banks.go'; import directivesPy from '!!raw-loader!@site/examples/api/directives.py'; import directivesMjs from '!!raw-loader!@site/examples/api/directives.mjs'; +import directivesSh from '!!raw-loader!@site/examples/api/directives.sh'; +import directivesGo from '!!raw-loader!@site/examples/api/directives.go'; ## What is a Memory Bank? @@ -44,11 +48,10 @@ Make sure you've completed the [Quick Start](./quickstart) to install the client - -```bash -hindsight bank create my-bank -``` - + + + + @@ -205,6 +208,12 @@ How skeptical vs trusting the bank is when evaluating claims during `reflect`. S + + + + + + | Value | Behaviour | @@ -275,6 +284,12 @@ Bank configuration fields (retain mission, extraction mode, observations mission + + + + + + You can update any subset of fields — only the keys you provide are changed. @@ -288,6 +303,12 @@ You can update any subset of fields — only the keys you provide are changed. + + + + + + The response distinguishes: @@ -303,6 +324,12 @@ The response distinguishes: + + + + + + This removes all bank-level overrides. The bank reverts to server-wide defaults (set via environment variables). @@ -337,6 +364,12 @@ Use directives for rules that must never be violated: + + + + + + ### Listing Directives @@ -348,6 +381,12 @@ Use directives for rules that must never be violated: + + + + + + ### Updating Directives @@ -359,6 +398,12 @@ Use directives for rules that must never be violated: + + + + + + ### Deleting Directives @@ -370,6 +415,12 @@ Use directives for rules that must never be violated: + + + + + + ### Directives vs Disposition diff --git a/hindsight-docs/versioned_docs/version-0.4/developer/api/mental-models.mdx b/hindsight-docs/versioned_docs/version-0.4/developer/api/mental-models.mdx index 4a0b3ca2..389496d2 100644 --- a/hindsight-docs/versioned_docs/version-0.4/developer/api/mental-models.mdx +++ b/hindsight-docs/versioned_docs/version-0.4/developer/api/mental-models.mdx @@ -12,6 +12,9 @@ import CodeSnippet from '@site/src/components/CodeSnippet'; {/* Import raw source files */} import mentalModelsPy from '!!raw-loader!@site/examples/api/mental-models.py'; +import mentalModelsMjs from '!!raw-loader!@site/examples/api/mental-models.mjs'; +import mentalModelsSh from '!!raw-loader!@site/examples/api/mental-models.sh'; +import mentalModelsGo from '!!raw-loader!@site/examples/api/mental-models.go'; ## What Are Mental Models? @@ -56,22 +59,14 @@ Creating a mental model runs a reflect operation in the background and saves the + + + - -```bash -# Create a mental model (async operation) -curl -X POST "http://localhost:8888/v1/default/banks/my-bank/mental-models" \ - -H "Content-Type: application/json" \ - -d '{ - "name": "Team Communication Preferences", - "source_query": "How does the team prefer to communicate?", - "tags": ["team"] - }' - -# Response: {"operation_id": "op-123"} -# Use the operations endpoint to check completion -``` - + + + + @@ -81,12 +76,38 @@ curl -X POST "http://localhost:8888/v1/default/banks/my-bank/mental-models" \ |-----------|------|----------|-------------| | `name` | string | Yes | Human-readable name for the mental model | | `source_query` | string | Yes | The query to run to generate content | +| `id` | string | No | Custom ID for the mental model (alphanumeric lowercase with hyphens). Auto-generated if omitted. | | `tags` | list | No | Tags for filtering during retrieval | | `max_tokens` | int | No | Maximum tokens for the mental model content | | `trigger` | object | No | Trigger settings (see [Automatic Refresh](#automatic-refresh)) | --- +## Create with Custom ID + +Assign a stable, human-readable ID to a mental model so you can retrieve or update it by name instead of relying on the auto-generated UUID: + + + + + + + + + + + + + + + + +:::tip +Custom IDs must be lowercase alphanumeric and may contain hyphens (e.g. `team-policies`, `q4-status`). If a mental model with that ID already exists, the request is rejected. +::: + +--- + ## Automatic Refresh Mental models can be configured to **automatically refresh** when observations are updated. This keeps them in sync with the latest knowledge without manual intervention. @@ -103,19 +124,14 @@ When `refresh_after_consolidation` is enabled, the mental model will be re-gener + + + - -```bash -# Create a mental model with automatic refresh enabled -curl -X POST "http://localhost:8888/v1/default/banks/my-bank/mental-models" \ - -H "Content-Type: application/json" \ - -d '{ - "name": "Project Status", - "source_query": "What is the current project status?", - "trigger": {"refresh_after_consolidation": true} - }' -``` - + + + + @@ -140,12 +156,14 @@ Enable automatic refresh for mental models that need to stay current. Disable it + + + - -```bash -curl "http://localhost:8888/v1/default/banks/my-bank/mental-models" -``` - + + + + @@ -157,12 +175,14 @@ curl "http://localhost:8888/v1/default/banks/my-bank/mental-models" + + + - -```bash -curl "http://localhost:8888/v1/default/banks/my-bank/mental-models/{mental_model_id}" -``` - + + + + @@ -190,12 +210,14 @@ Re-run the source query to update the mental model with current knowledge: + + + - -```bash -curl -X POST "http://localhost:8888/v1/default/banks/my-bank/mental-models/{mental_model_id}/refresh" -``` - + + + + @@ -214,14 +236,14 @@ Update the mental model's name: + + + - -```bash -curl -X PATCH "http://localhost:8888/v1/default/banks/my-bank/mental-models/{mental_model_id}" \ - -H "Content-Type: application/json" \ - -d '{"name": "Updated Team Communication Preferences"}' -``` - + + + + @@ -233,12 +255,14 @@ curl -X PATCH "http://localhost:8888/v1/default/banks/my-bank/mental-models/{men + + + - -```bash -curl -X DELETE "http://localhost:8888/v1/default/banks/my-bank/mental-models/{mental_model_id}" -``` - + + + + @@ -280,6 +304,15 @@ Every time a mental model's content changes (via refresh or manual update), the + + + + + + + + + ### Response diff --git a/hindsight-docs/versioned_docs/version-0.4/developer/api/quickstart.mdx b/hindsight-docs/versioned_docs/version-0.4/developer/api/quickstart.mdx index eebba331..01b87243 100644 --- a/hindsight-docs/versioned_docs/version-0.4/developer/api/quickstart.mdx +++ b/hindsight-docs/versioned_docs/version-0.4/developer/api/quickstart.mdx @@ -15,6 +15,7 @@ import {ClientsGrid} from '@site/src/components/SupportedGrids'; import quickstartPy from '!!raw-loader!@site/examples/api/quickstart.py'; import quickstartMjs from '!!raw-loader!@site/examples/api/quickstart.mjs'; import quickstartSh from '!!raw-loader!@site/examples/api/quickstart.sh'; +import quickstartGo from '!!raw-loader!@site/examples/api/quickstart.go'; ## Clients @@ -90,6 +91,15 @@ curl -fsSL https://hindsight.vectorize.io/get-cli | bash + + + +```bash +go get github.com/vectorize-io/hindsight/hindsight-clients/go +``` + + + diff --git a/hindsight-docs/versioned_docs/version-0.4/developer/api/recall.mdx b/hindsight-docs/versioned_docs/version-0.4/developer/api/recall.mdx index 8fee9e41..00ae6b42 100644 --- a/hindsight-docs/versioned_docs/version-0.4/developer/api/recall.mdx +++ b/hindsight-docs/versioned_docs/version-0.4/developer/api/recall.mdx @@ -16,6 +16,7 @@ import CodeSnippet from '@site/src/components/CodeSnippet'; import recallPy from '!!raw-loader!@site/examples/api/recall.py'; import recallMjs from '!!raw-loader!@site/examples/api/recall.mjs'; import recallSh from '!!raw-loader!@site/examples/api/recall.sh'; +import recallGo from '!!raw-loader!@site/examples/api/recall.go'; :::info How Recall Works Learn about the four retrieval strategies (semantic, keyword, graph, temporal) and RRF fusion in the [Recall Architecture](/developer/retrieval) guide. @@ -37,6 +38,9 @@ Make sure you've completed the [Quick Start](./quickstart) to install the client + + + --- @@ -59,9 +63,19 @@ Each type runs the full four-strategy retrieval pipeline independently, so narro + + + + + + + + + + :::tip About Observations @@ -79,6 +93,12 @@ Controls retrieval depth and breadth. Accepted values are `low`, `mid` (default) + + + + + + ### max_tokens @@ -89,6 +109,15 @@ The maximum number of tokens the returned facts can collectively occupy. Default + + + + + + + + + ### query_timestamp @@ -118,6 +147,12 @@ When enabled and `types` includes `observation`, each observation result is acco + + + + + + #### entities @@ -152,7 +187,20 @@ Consider a bank with these four memories: Returns memories that have **at least one** matching tag, plus untagged memories. + + + + + + + + + + + + + Use this for **shared global knowledge + user-specific** patterns, where untagged memories represent information everyone should see. @@ -160,7 +208,20 @@ Use this for **shared global knowledge + user-specific** patterns, where untagge Same as `any` but untagged memories are excluded. + + + + + + + + + + + + + Use this when memories are **fully partitioned by tags** and untagged memories should never be visible. @@ -168,7 +229,20 @@ Use this when memories are **fully partitioned by tags** and untagged memories s Returns memories that have **every** specified tag, plus untagged memories. + + + + + + + + + + + + + Use this when memories must belong to a **specific intersection** of scopes (e.g., only memories relevant to both a user and a project), while still surfacing shared global knowledge. @@ -176,7 +250,20 @@ Use this when memories must belong to a **specific intersection** of scopes (e.g Returns memories that have **every** specified tag, and excludes untagged memories. + + + + + + + + + + + + + Use this for strict scope enforcement where a memory must explicitly belong to **all** specified contexts. diff --git a/hindsight-docs/versioned_docs/version-0.4/developer/api/reflect.mdx b/hindsight-docs/versioned_docs/version-0.4/developer/api/reflect.mdx index 079d2997..14e99c6b 100644 --- a/hindsight-docs/versioned_docs/version-0.4/developer/api/reflect.mdx +++ b/hindsight-docs/versioned_docs/version-0.4/developer/api/reflect.mdx @@ -16,6 +16,7 @@ import CodeSnippet from '@site/src/components/CodeSnippet'; import reflectPy from '!!raw-loader!@site/examples/api/reflect.py'; import reflectMjs from '!!raw-loader!@site/examples/api/reflect.mjs'; import reflectSh from '!!raw-loader!@site/examples/api/reflect.sh'; +import reflectGo from '!!raw-loader!@site/examples/api/reflect.go'; :::info How Reflect Works Learn about disposition-driven reasoning in the [Reflect Architecture](/developer/reflect) guide. @@ -37,6 +38,9 @@ Make sure you've completed the [Quick Start](./quickstart) to install the client + + + --- @@ -58,6 +62,12 @@ Controls how thoroughly the agent explores the memory bank before answering. Acc + + + + + + ### max_tokens @@ -78,6 +88,9 @@ An optional JSON Schema object. When provided, the LLM generates a response that + + + ### tags @@ -88,6 +101,15 @@ Filters which memories the agent can access during reflection. Works identically + + + + + + + + + ### include @@ -102,6 +124,15 @@ When enabled, the response includes a `based_on` object listing the memories, me + + + + + + + + + #### include.tool_calls diff --git a/hindsight-docs/versioned_docs/version-0.4/developer/api/retain.mdx b/hindsight-docs/versioned_docs/version-0.4/developer/api/retain.mdx index bd0df1e9..78bb2d93 100644 --- a/hindsight-docs/versioned_docs/version-0.4/developer/api/retain.mdx +++ b/hindsight-docs/versioned_docs/version-0.4/developer/api/retain.mdx @@ -16,6 +16,7 @@ import CodeSnippet from '@site/src/components/CodeSnippet'; import retainPy from '!!raw-loader!@site/examples/api/retain.py'; import retainMjs from '!!raw-loader!@site/examples/api/retain.mjs'; import retainSh from '!!raw-loader!@site/examples/api/retain.sh'; +import retainGo from '!!raw-loader!@site/examples/api/retain.go'; :::info How Retain Works Learn about fact extraction, entity resolution, and graph construction in the [Retain Architecture](/developer/retain) guide. @@ -39,6 +40,9 @@ A single retain call accepts one or more **items**. Each item is a piece of raw + + + ### Retaining a Conversation @@ -52,6 +56,12 @@ A full conversation should be retained as a single item. The LLM can parse any f + + + + + + When the conversation grows — a new message arrives — just retain again with the full updated content and the same `document_id`. Hindsight will delete the previous version and reprocess from scratch, so memories always reflect the latest state of the conversation. @@ -92,6 +102,9 @@ Providing context consistently is one of the highest-leverage things you can do + + + ### metadata @@ -203,6 +216,12 @@ Multiple items can be submitted in a single request. Batch ingestion is the reco + + + + + + @@ -215,18 +234,18 @@ Upload files directly — Hindsight converts them to text and extracts memories **Supported formats:** PDF, DOCX, DOC, PPTX, PPT, XLSX, XLS, images (JPG, PNG, GIF, etc. — OCR), audio (MP3, WAV, FLAC, etc. — transcription), HTML, and plain text formats (TXT, MD, CSV, JSON, YAML, etc.) - - - - - - + + + + + + The file retain endpoint always returns asynchronously. The response contains `operation_ids` — one per uploaded file — which you can poll via `GET /v1/default/banks/{bank_id}/operations` to track progress. @@ -237,6 +256,15 @@ Upload up to 10 files per request (max 100 MB total). Each file becomes a separa + + + + + + + + + :::info File Storage @@ -256,6 +284,12 @@ For large batches, use async ingestion to avoid blocking your application: + + + + + + When `async: true`, the call returns immediately with an `operation_id`. Processing runs in the background via the worker service. No `usage` metrics are returned for async operations. diff --git a/hindsight-docs/versioned_docs/version-0.4/sdks/integrations/ai-sdk.mdx b/hindsight-docs/versioned_docs/version-0.4/sdks/integrations/ai-sdk.mdx index 0f9ee62b..f098074a 100644 --- a/hindsight-docs/versioned_docs/version-0.4/sdks/integrations/ai-sdk.mdx +++ b/hindsight-docs/versioned_docs/version-0.4/sdks/integrations/ai-sdk.mdx @@ -6,6 +6,8 @@ sidebar_position: 4 The `@vectorize-io/hindsight-ai-sdk` package integrates [Hindsight](https://hindsight.vectorize.io) memory with the [Vercel AI SDK](https://ai-sdk.dev). It provides five ready-to-use tools for retaining, recalling, and reflecting on long-term memories. +[View Changelog →](/changelog/integrations/ai-sdk) + import CodeSnippet from '@site/src/components/CodeSnippet'; import aiSdkTs from '!!raw-loader!@site/examples/integrations/ai-sdk.ts'; diff --git a/hindsight-docs/versioned_docs/version-0.4/sdks/integrations/chat.md b/hindsight-docs/versioned_docs/version-0.4/sdks/integrations/chat.md index a35b3b18..027d66b3 100644 --- a/hindsight-docs/versioned_docs/version-0.4/sdks/integrations/chat.md +++ b/hindsight-docs/versioned_docs/version-0.4/sdks/integrations/chat.md @@ -6,6 +6,8 @@ sidebar_position: 5 We built `@vectorize-io/hindsight-chat` to give [Vercel Chat SDK](https://github.com/vercel/chat) bots persistent, per-user memory with a single handler wrapper. The integration works across Slack, Discord, Teams, Google Chat, GitHub, and Linear — no custom plumbing required. +[View Changelog →](/changelog/integrations/chat) + ## Installation ```bash diff --git a/hindsight-docs/versioned_docs/version-0.4/sdks/integrations/crewai.md b/hindsight-docs/versioned_docs/version-0.4/sdks/integrations/crewai.md index 33b28b1e..4169f971 100644 --- a/hindsight-docs/versioned_docs/version-0.4/sdks/integrations/crewai.md +++ b/hindsight-docs/versioned_docs/version-0.4/sdks/integrations/crewai.md @@ -6,6 +6,8 @@ sidebar_position: 5 Persistent memory for AI agent crews via [CrewAI](https://github.com/crewAIInc/crewAI). Give your crews long-term memory with fact extraction, entity tracking, and temporal awareness. +[View Changelog →](/changelog/integrations/crewai) + ## Features - **Drop-in Storage Backend** - Implements CrewAI's `Storage` interface for `ExternalMemory` diff --git a/hindsight-docs/versioned_docs/version-0.4/sdks/integrations/langgraph.md b/hindsight-docs/versioned_docs/version-0.4/sdks/integrations/langgraph.md new file mode 100644 index 00000000..2cda46c7 --- /dev/null +++ b/hindsight-docs/versioned_docs/version-0.4/sdks/integrations/langgraph.md @@ -0,0 +1,317 @@ +--- +sidebar_position: 7 +--- + +# LangGraph / LangChain + +Persistent long-term memory for [LangGraph](https://langchain-ai.github.io/langgraph/) and [LangChain](https://python.langchain.com/) agents via Hindsight. Three integration patterns at different abstraction levels — the tools pattern works with both LangChain and LangGraph, while nodes and the BaseStore adapter are LangGraph-specific. + +[View Changelog →](/changelog/integrations/langgraph) + +## Features + +- **Memory Tools** — retain, recall, and reflect as LangChain `@tool` functions compatible with `bind_tools()` and `ToolNode`. Works with **both LangChain and LangGraph** — no LangGraph dependency required for this pattern. +- **Graph Nodes** *(LangGraph)* — Pre-built nodes that auto-inject memories before LLM calls and auto-store after responses +- **BaseStore Adapter** *(LangGraph)* — Drop-in `BaseStore` implementation backed by Hindsight, for LangGraph's native memory patterns +- **Dynamic Banks** — Resolve bank IDs per-request from `RunnableConfig` for per-user memory +- **Async-Native** — Uses `aretain`, `arecall`, `areflect` directly — no thread-pool workarounds + +## Installation + +```bash +pip install hindsight-langgraph +``` + +## Quick Start: Tools (LangChain & LangGraph) + +The tools pattern creates standard LangChain `@tool` functions that work with any LangChain-compatible model via `bind_tools()`. You can use them with a LangGraph agent or with plain LangChain — no LangGraph required. + +**With LangGraph (recommended):** + +```python +from hindsight_client import Hindsight +from hindsight_langgraph import create_hindsight_tools +from langchain_openai import ChatOpenAI +from langgraph.prebuilt import create_react_agent + +client = Hindsight(base_url="http://localhost:8888") +tools = create_hindsight_tools(client=client, bank_id="user-123") + +agent = create_react_agent(ChatOpenAI(model="gpt-4o"), tools=tools) + +result = await agent.ainvoke( + {"messages": [{"role": "user", "content": "Remember that I prefer dark mode"}]} +) +``` + +**With plain LangChain:** + +```python +from hindsight_client import Hindsight +from hindsight_langgraph import create_hindsight_tools +from langchain_openai import ChatOpenAI + +client = Hindsight(base_url="http://localhost:8888") +tools = create_hindsight_tools(client=client, bank_id="user-123") + +model = ChatOpenAI(model="gpt-4o").bind_tools(tools) +response = await model.ainvoke("Remember that I prefer dark mode") +``` + +When using plain LangChain, you handle the tool execution loop yourself — call the model, check for `tool_calls`, execute them, and feed results back. LangGraph automates this loop for you. + +The agent gets three tools it can call: + +- **`hindsight_retain`** — Store information to long-term memory +- **`hindsight_recall`** — Search long-term memory for relevant facts +- **`hindsight_reflect`** — Synthesize a reasoned answer from memories + +## Quick Start: Memory Nodes (LangGraph) + +Add recall and retain nodes to your graph for automatic memory injection and storage. + +```python +from hindsight_client import Hindsight +from hindsight_langgraph import create_recall_node, create_retain_node +from langgraph.graph import StateGraph, MessagesState, START, END + +client = Hindsight(base_url="http://localhost:8888") + +recall = create_recall_node(client=client, bank_id="user-123") +retain = create_retain_node(client=client, bank_id="user-123") + +builder = StateGraph(MessagesState) +builder.add_node("recall", recall) +builder.add_node("agent", agent_node) # your LLM node +builder.add_node("retain", retain) + +builder.add_edge(START, "recall") +builder.add_edge("recall", "agent") +builder.add_edge("agent", "retain") +builder.add_edge("retain", END) + +graph = builder.compile() +``` + +The recall node extracts the latest user message, searches Hindsight, and injects matching memories as a `SystemMessage`. The retain node stores human messages (optionally AI messages too) after the response. + +## Quick Start: BaseStore (LangGraph) + +Use Hindsight as a LangGraph `BaseStore` for cross-thread persistent memory with semantic search. + +```python +from hindsight_client import Hindsight +from hindsight_langgraph import HindsightStore + +client = Hindsight(base_url="http://localhost:8888") +store = HindsightStore(client=client) + +graph = builder.compile(checkpointer=checkpointer, store=store) + +# Store and search via the store API +await store.aput(("user", "123", "prefs"), "theme", {"value": "dark mode"}) +results = await store.asearch(("user", "123", "prefs"), query="theme preference") +``` + +Namespace tuples are mapped to Hindsight bank IDs with `.` as separator (e.g., `("user", "123")` becomes bank `user.123`). Banks are auto-created on first access. + +## Dynamic Bank IDs + +Both nodes and the store support per-user bank resolution from `RunnableConfig`: + +```python +recall = create_recall_node(client=client, bank_id_from_config="user_id") +retain = create_retain_node(client=client, bank_id_from_config="user_id") + +# Bank ID resolved at runtime from config +result = await graph.ainvoke( + {"messages": [{"role": "user", "content": "hello"}]}, + config={"configurable": {"user_id": "user-456"}}, +) +``` + +## Selecting Tools + +Include only the tools you need: + +```python +tools = create_hindsight_tools( + client=client, + bank_id="user-123", + include_retain=True, + include_recall=True, + include_reflect=False, # Omit reflect +) +``` + +## Global Configuration + +Instead of passing a client to every call, configure once: + +```python +from hindsight_langgraph import configure, create_hindsight_tools + +configure( + hindsight_api_url="http://localhost:8888", + api_key="your-api-key", # Or set HINDSIGHT_API_KEY env var + budget="mid", # Recall budget: low/mid/high + max_tokens=4096, # Max tokens for recall results + tags=["env:prod"], # Tags for stored memories + recall_tags=["scope:global"], # Tags to filter recall + recall_tags_match="any", # Tag match mode: any/all/any_strict/all_strict +) + +# Now create tools without passing client — uses global config +tools = create_hindsight_tools(bank_id="user-123") +``` + +## Retain Node Options + +```python +retain = create_retain_node( + client=client, + bank_id="user-123", + retain_human=True, # Store human messages (default: True) + retain_ai=False, # Store AI responses (default: False) + tags=["source:chat"], # Tags applied to stored memories +) +``` + +## Recall Node Options + +```python +recall = create_recall_node( + client=client, + bank_id="user-123", + budget="low", # Recall budget: low/mid/high + max_results=10, # Max memories injected + max_tokens=4096, # Max tokens for recall + tags=["scope:user"], # Filter by tags + tags_match="all", # Tag match mode +) +``` + +### Using `output_key` for Prompt Control + +By default, the recall node appends a `SystemMessage` to `messages`. Use `output_key` to write memory text to a custom state field instead, giving you full control over prompt ordering: + +```python +from typing import Optional +from langgraph.graph import MessagesState + +class AgentState(MessagesState): + memory_context: Optional[str] = None + +recall = create_recall_node( + client=client, + bank_id="user-123", + output_key="memory_context", +) + +# In your agent node, read state["memory_context"] and prepend it +# to the system prompt before calling the model. +``` + +## Limitations and Notes + +### HindsightStore + +- **Async-only.** All sync methods (`batch`, `get`, `put`, `delete`, `search`, `list_namespaces`) raise `NotImplementedError`. Use the async variants (`abatch`, `aget`, `aput`, `adelete`, `asearch`, `alist_namespaces`) instead. +- **`get()` relies on recall.** There is no direct key lookup — the key is used as a recall query and only exact `document_id` matches are returned. Items that do not rank in the top recall results may appear missing. +- **`list_namespaces` is session-scoped.** It only tracks namespaces that have been written to via `aput()` during the current process. After a restart, `list_namespaces` returns empty even though data still exists in Hindsight. +- **`delete` is a no-op.** Calling `adelete()` logs a debug message but does not remove data from Hindsight. Hindsight's memory model is append-oriented; fact superseding is handled automatically during retain. + +### Memory Nodes + +- **SystemMessage ordering.** The recall node adds a `SystemMessage` with recalled memories. Because `MessagesState` uses `add_messages` (which appends), this message appears after existing messages rather than at position 0. The message has a stable ID (`hindsight_memory_context`) so it is updated rather than duplicated across invocations. If your LLM provider requires system messages first, sort or filter messages in your agent node before passing them to the model. + +### Error Handling + +- **Tools** raise `HindsightError` on failure, which surfaces to the agent as a tool error. +- **Nodes** silently log errors and return empty messages, so a Hindsight outage does not crash your graph. + +## API Reference + +### `create_hindsight_tools()` + +| Parameter | Default | Description | +|---|---|---| +| `bank_id` | *required* | Hindsight memory bank ID | +| `client` | `None` | Pre-configured Hindsight client | +| `hindsight_api_url` | `None` | API URL (used if no client provided) | +| `api_key` | `None` | API key (used if no client provided) | +| `budget` | `"mid"` | Recall/reflect budget level (low/mid/high) | +| `max_tokens` | `4096` | Maximum tokens for recall results | +| `tags` | `None` | Tags applied when storing memories | +| `recall_tags` | `None` | Tags to filter when searching | +| `recall_tags_match` | `"any"` | Tag matching mode (any/all/any\_strict/all\_strict) | +| `retain_metadata` | `None` | Default metadata dict for retain operations | +| `retain_document_id` | `None` | Default document\_id for retain (groups/upserts memories) | +| `recall_types` | `None` | Fact types to filter (world, experience, opinion, observation) | +| `recall_include_entities` | `False` | Include entity information in recall results | +| `reflect_context` | `None` | Additional context for reflect operations | +| `reflect_max_tokens` | `None` | Max tokens for reflect results (defaults to `max_tokens`) | +| `reflect_response_schema` | `None` | JSON schema to constrain reflect output format | +| `reflect_tags` | `None` | Tags to filter memories used in reflect (defaults to `recall_tags`) | +| `reflect_tags_match` | `None` | Tag matching for reflect (defaults to `recall_tags_match`) | +| `include_retain` | `True` | Include the retain (store) tool | +| `include_recall` | `True` | Include the recall (search) tool | +| `include_reflect` | `True` | Include the reflect (synthesize) tool | + +### `create_recall_node()` + +| Parameter | Default | Description | +|---|---|---| +| `bank_id` | `None` | Static bank ID (or use `bank_id_from_config`) | +| `client` | `None` | Pre-configured Hindsight client | +| `hindsight_api_url` | `None` | API URL (used if no client provided) | +| `api_key` | `None` | API key (used if no client provided) | +| `budget` | `"mid"` | Recall budget level | +| `max_tokens` | `4096` | Max tokens for recall results | +| `max_results` | `10` | Max memories to inject | +| `tags` | `None` | Tags to filter recall results | +| `tags_match` | `"any"` | Tag matching mode | +| `bank_id_from_config` | `"user_id"` | Config key to resolve bank ID at runtime | +| `output_key` | `None` | If set, write memory text to this state key instead of appending a SystemMessage to `messages` | + +### `create_retain_node()` + +| Parameter | Default | Description | +|---|---|---| +| `bank_id` | `None` | Static bank ID (or use `bank_id_from_config`) | +| `client` | `None` | Pre-configured Hindsight client | +| `hindsight_api_url` | `None` | API URL (used if no client provided) | +| `api_key` | `None` | API key (used if no client provided) | +| `tags` | `None` | Tags applied to stored memories | +| `bank_id_from_config` | `"user_id"` | Config key to resolve bank ID at runtime | +| `retain_human` | `True` | Store human messages | +| `retain_ai` | `False` | Store AI responses | + +### `HindsightStore()` + +| Parameter | Default | Description | +|---|---|---| +| `client` | `None` | Pre-configured Hindsight client | +| `hindsight_api_url` | `None` | API URL (used if no client provided) | +| `api_key` | `None` | API key (used if no client provided) | +| `tags` | `None` | Tags applied to all retain operations | + +### `configure()` + +| Parameter | Default | Description | +|---|---|---| +| `hindsight_api_url` | Production API | Hindsight API URL | +| `api_key` | `HINDSIGHT_API_KEY` env | API key for authentication | +| `budget` | `"mid"` | Default recall budget level | +| `max_tokens` | `4096` | Default max tokens for recall | +| `tags` | `None` | Default tags for retain operations | +| `recall_tags` | `None` | Default tags to filter recall | +| `recall_tags_match` | `"any"` | Default tag matching mode | +| `verbose` | `False` | Enable verbose logging | + +## Requirements + +- Python >= 3.10 +- langchain-core >= 0.3.0 +- hindsight-client >= 0.4.0 +- langgraph >= 0.3.0 *(only for nodes and store patterns — install with `pip install hindsight-langgraph[langgraph]`)* diff --git a/hindsight-docs/versioned_docs/version-0.4/sdks/integrations/litellm.md b/hindsight-docs/versioned_docs/version-0.4/sdks/integrations/litellm.md index 31ecbcde..9a22d89c 100644 --- a/hindsight-docs/versioned_docs/version-0.4/sdks/integrations/litellm.md +++ b/hindsight-docs/versioned_docs/version-0.4/sdks/integrations/litellm.md @@ -6,6 +6,8 @@ sidebar_position: 1 Universal LLM memory integration via [LiteLLM](https://github.com/BerriAI/litellm). Add persistent memory to any LLM application with just a few lines of code. +[View Changelog →](/changelog/integrations/litellm) + ## Features - **Universal LLM Support** - Works with 100+ LLM providers via LiteLLM (OpenAI, Anthropic, Groq, Azure, AWS Bedrock, Google Vertex AI, and more) diff --git a/hindsight-docs/versioned_docs/version-0.4/sdks/integrations/nemoclaw.md b/hindsight-docs/versioned_docs/version-0.4/sdks/integrations/nemoclaw.md new file mode 100644 index 00000000..68105526 --- /dev/null +++ b/hindsight-docs/versioned_docs/version-0.4/sdks/integrations/nemoclaw.md @@ -0,0 +1,248 @@ +--- +sidebar_position: 5 +--- + +# NemoClaw + +Persistent memory for [NemoClaw](https://nemoclaw.ai) sandboxed agents using [Hindsight](https://hindsight.vectorize.io). + +NemoClaw runs [OpenClaw](https://openclaw.ai) inside an OpenShell sandbox with controlled filesystem, process, and network egress policies. The `hindsight-nemoclaw` package automates adding Hindsight memory to a sandbox in one command — no code changes required. + +[View Changelog →](/changelog/integrations/nemoclaw) + +## Quick Start + +```bash +npx @vectorize-io/hindsight-nemoclaw setup \ + --sandbox my-assistant \ + --api-url https://api.hindsight.vectorize.io \ + --api-token \ + --bank-prefix my-sandbox +``` + +Get an API key at [Hindsight Cloud](https://ui.hindsight.vectorize.io/signup). + +You'll see output like: + +``` +[0] Preflight checks... + ✓ openshell found + ✓ openclaw found + +[1] Installing @vectorize-io/hindsight-openclaw plugin... + ✓ Plugin installed + +[2] Configuring plugin in ~/.openclaw/openclaw.json... + ✓ Plugin config written (bank: my-sandbox-openclaw) + +[3] Applying Hindsight network policy to sandbox "my-assistant"... + ✓ Policy version 2 submitted + ✓ Policy version 2 loaded (active version: 2) + +[4] Restarting OpenClaw gateway... + ✓ Gateway restarted + +✓ Setup complete! +``` + +## How It Works + +### The sandbox problem + +OpenShell enforces strict network egress — every outbound endpoint must be explicitly permitted in the sandbox policy. By default, the Hindsight API (`api.hindsight.vectorize.io`) is not in that list. + +The `hindsight-openclaw` plugin supports **external API mode**, where it skips the local daemon entirely and makes direct HTTPS calls to Hindsight Cloud. This is the natural fit for sandboxed environments: the plugin becomes a thin HTTP client, and the only sandbox change needed is one egress rule. + +### What the setup command does + +1. **Preflight** — verifies `openshell` and `openclaw` are installed +2. **Install plugin** — runs `openclaw plugins install @vectorize-io/hindsight-openclaw` +3. **Configure plugin** — writes external API mode config to `~/.openclaw/openclaw.json` +4. **Apply policy** — reads the current sandbox policy, merges the Hindsight egress block, and re-applies via `openshell policy set` +5. **Restart gateway** — runs `openclaw gateway restart` + +### Memory flow + +Once set up, the `hindsight-openclaw` plugin hooks into the OpenClaw gateway lifecycle: + +- **`before_agent_start`** — recalls relevant memories from past sessions and injects them into context +- **`agent_end`** — retains the conversation to the Hindsight memory bank + +The sandbox doesn't interfere with either step — it sees the Hindsight calls as normal HTTPS egress to a permitted endpoint. + +## CLI Reference + +``` +hindsight-nemoclaw setup [options] + +Options: + --sandbox NemoClaw sandbox name (required) + --api-url Hindsight API URL (required) + --api-token Hindsight API token (required) + --bank-prefix Memory bank prefix (default: "nemoclaw") + --skip-policy Skip sandbox network policy update + --skip-plugin-install Skip openclaw plugin installation + --dry-run Preview changes without applying + --help Show help +``` + +Use `--dry-run` to preview all changes before applying anything. Use `--skip-policy` if you manage sandbox policies manually. + +## Manual Setup + +If you prefer to apply the steps yourself instead of using the CLI: + +### 1. Install the plugin + +```bash +openclaw plugins install @vectorize-io/hindsight-openclaw +``` + +### 2. Configure `~/.openclaw/openclaw.json` + +```json +{ + "plugins": { + "entries": { + "hindsight-openclaw": { + "enabled": true, + "config": { + "hindsightApiUrl": "https://api.hindsight.vectorize.io", + "hindsightApiToken": "", + "llmProvider": "claude-code", + "dynamicBankId": false, + "bankIdPrefix": "my-sandbox" + } + } + } + } +} +``` + +`llmProvider: "claude-code"` uses the Claude Code process already present in the sandbox — no additional API key needed. + +### 3. Add the Hindsight network policy + +`openshell policy set` replaces the entire policy document. Export your current policy first, add the Hindsight block, then re-apply: + +```yaml +network_policies: + hindsight: + name: hindsight + endpoints: + - host: api.hindsight.vectorize.io + port: 443 + protocol: rest + tls: terminate + enforcement: enforce + rules: + - allow: + method: GET + path: /** + - allow: + method: POST + path: /** + - allow: + method: PUT + path: /** + binaries: + - path: /usr/local/bin/openclaw +``` + +```bash +openshell policy set my-sandbox --policy /path/to/full-policy.yaml --wait +openclaw gateway restart +``` + +## Configuration Options + +| Option | Type | Default | Description | +|---|---|---|---| +| `hindsightApiUrl` | string | — | Hindsight API base URL | +| `hindsightApiToken` | string | — | API token for authentication | +| `llmProvider` | string | auto-detect | LLM provider for memory extraction | +| `dynamicBankId` | boolean | `false` | Isolate memory per user (`true`) or share across sessions (`false`) | +| `bankIdPrefix` | string | `"nemoclaw"` | Prefix for the memory bank name | + +### Bank naming + +When `dynamicBankId: false`, all sessions write to a single bank named `{bankIdPrefix}-openclaw`. When `dynamicBankId: true`, each user gets an isolated bank — useful for multi-tenant deployments. + +## Verifying It Works + +After setup, check the gateway logs: + +```bash +tail -f /tmp/openclaw/openclaw-*.log | grep Hindsight +``` + +On startup you should see: + +``` +[Hindsight] Plugin loaded successfully +[Hindsight] ✓ Using external API: https://api.hindsight.vectorize.io +[Hindsight] External API health: {"status":"healthy","database":"connected"} +[Hindsight] Default bank: my-sandbox-openclaw +[Hindsight] ✓ Ready (external API mode) +``` + +After a conversation: + +``` +[Hindsight] before_agent_start - bank: my-sandbox-openclaw, channel: undefined/webchat +[Hindsight Hook] agent_end triggered - bank: my-sandbox-openclaw +[Hindsight] Retained 6 messages to bank my-sandbox-openclaw for session agent:main:... +``` + +## Pitfalls + +### Policy replacement is full-document + +`openshell policy set` replaces the entire policy document. The `hindsight-nemoclaw setup` command handles this automatically. If you're applying manually, export the current policy first so existing rules aren't lost. + +### LaunchAgent can't follow symlinks on macOS + +On macOS, the OpenClaw gateway runs as a LaunchAgent under a restricted security context. `openclaw plugins install --link` creates a symlink the LaunchAgent can't follow — the setup command installs as a copy instead. If you see `EPERM: operation not permitted, scandir` in gateway logs, this is the cause. + +### Memory retention is asynchronous + +Fact extraction and entity resolution happen in the background after `retain`. If you open a new session immediately after closing one, the most recent memories may not be indexed yet — typically a few seconds. + +### Binary-scoped egress + +The `binaries` field in the network policy restricts the egress rule to a specific executable path. If OpenClaw updates and the binary path changes, the rule silently stops working. Check your binary path after upgrades. + +## Troubleshooting + +### Plugin not loading + +```bash +openclaw plugins list | grep hindsight +# Should show: ✓ enabled │ Hindsight Memory │ ... + +# Reinstall +openclaw plugins install @vectorize-io/hindsight-openclaw +``` + +### Egress blocked + +If calls to `api.hindsight.vectorize.io` are being blocked, check the active sandbox policy: + +```bash +openshell sandbox get my-assistant +``` + +Verify the `hindsight` block is present and the `binaries` path matches your OpenClaw binary: + +```bash +which openclaw +``` + +### External API not connecting + +```bash +tail -f /tmp/openclaw/openclaw-*.log | grep Hindsight + +# If you see daemon startup messages instead of "Using external API", +# the plugin config isn't being read — check ~/.openclaw/openclaw.json +``` diff --git a/hindsight-docs/versioned_docs/version-0.4/sdks/integrations/openclaw.md b/hindsight-docs/versioned_docs/version-0.4/sdks/integrations/openclaw.md index cd894c7d..ae5c8c20 100644 --- a/hindsight-docs/versioned_docs/version-0.4/sdks/integrations/openclaw.md +++ b/hindsight-docs/versioned_docs/version-0.4/sdks/integrations/openclaw.md @@ -8,6 +8,8 @@ Local, long term memory for [OpenClaw](https://openclaw.ai) agents using [Hindsi This plugin integrates [hindsight-embed](https://vectorize.io/hindsight/cli), a standalone daemon that bundles Hindsight's memory engine (API + PostgreSQL) into a single command. Everything runs locally on your machine, reuses the LLM you're already paying for, and costs nothing extra. +[View Changelog →](/changelog/integrations/openclaw) + ## Quick Start **Step 1: Set up LLM for memory extraction** diff --git a/hindsight-docs/versioned_docs/version-0.4/sdks/integrations/pydantic-ai.md b/hindsight-docs/versioned_docs/version-0.4/sdks/integrations/pydantic-ai.md index 8f6e6baa..4b1c2e24 100644 --- a/hindsight-docs/versioned_docs/version-0.4/sdks/integrations/pydantic-ai.md +++ b/hindsight-docs/versioned_docs/version-0.4/sdks/integrations/pydantic-ai.md @@ -6,6 +6,8 @@ sidebar_position: 6 Persistent memory tools for [Pydantic AI](https://ai.pydantic.dev/) agents via Hindsight. Give your agents long-term memory with retain, recall, and reflect — all async-native with no thread-pool hacks. +[View Changelog →](/changelog/integrations/pydantic-ai) + ## Features - **Async-Native Tools** — Uses Pydantic AI's async tool interface directly (`aretain`, `arecall`, `areflect`) diff --git a/hindsight-docs/versioned_sidebars/version-0.4-sidebars.json b/hindsight-docs/versioned_sidebars/version-0.4-sidebars.json index 1feded7b..caed2285 100644 --- a/hindsight-docs/versioned_sidebars/version-0.4-sidebars.json +++ b/hindsight-docs/versioned_sidebars/version-0.4-sidebars.json @@ -291,6 +291,22 @@ "icon": "/img/icons/hermes.png" } }, + { + "type": "doc", + "id": "sdks/integrations/langgraph", + "label": "LangGraph / LangChain", + "customProps": { + "icon": "/img/icons/langgraph.png" + } + }, + { + "type": "doc", + "id": "sdks/integrations/nemoclaw", + "label": "NemoClaw", + "customProps": { + "icon": "/img/icons/nemoclaw.png" + } + }, { "type": "doc", "id": "sdks/integrations/skills", diff --git a/skills/hindsight-docs/references/best-practices.md b/skills/hindsight-docs/references/best-practices.md index 301e24f5..2a5bdaa6 100644 --- a/skills/hindsight-docs/references/best-practices.md +++ b/skills/hindsight-docs/references/best-practices.md @@ -1,7 +1,6 @@ -# Best Practices -Practical guidance for agents and developers integrating Hindsight memory into production systems. + **Contents** - [Core Concepts](#core-concepts) — Memory banks, taxonomy, memory types diff --git a/skills/hindsight-docs/references/changelog/index.md b/skills/hindsight-docs/references/changelog/index.md index 3371b96b..64ba96d4 100644 --- a/skills/hindsight-docs/references/changelog/index.md +++ b/skills/hindsight-docs/references/changelog/index.md @@ -2,22 +2,9 @@ hide_table_of_contents: true --- -# Changelog +import PageHero from '@site/src/components/PageHero'; -This changelog highlights user-facing changes only. Internal maintenance, CI/CD, and infrastructure updates are omitted. - -For full release details, see [GitHub Releases](https://github.com/vectorize-io/hindsight/releases). - -## Integration Changelogs - -| Integration | Package | Description | -|---|---|---| -| [LiteLLM](integrations/litellm.md) | `hindsight-litellm` | Universal LLM memory via LiteLLM (100+ providers) | -| [Pydantic AI](integrations/pydantic-ai.md) | `hindsight-pydantic-ai` | Persistent memory tools for Pydantic AI agents | -| [CrewAI](integrations/crewai.md) | `hindsight-crewai` | Persistent memory for CrewAI agents | -| [AI SDK](integrations/ai-sdk.md) | `@vectorize-io/hindsight-ai-sdk` | Memory integration for Vercel AI SDK | -| [Chat SDK](integrations/chat.md) | `@vectorize-io/hindsight-chat` | Memory integration for Vercel Chat SDK | -| [OpenClaw](integrations/openclaw.md) | `@vectorize-io/hindsight-openclaw` | Hindsight memory plugin for OpenClaw | + ## [0.4.19](https://github.com/vectorize-io/hindsight/releases/tag/v0.4.19) @@ -606,3 +593,14 @@ For full release details, see [GitHub Releases](https://github.com/vectorize-io/ **Bug Fixes** - Fixed the standalone Docker image so it builds/runs correctly. ([`1056a20`](https://github.com/vectorize-io/hindsight/commit/1056a20)) + +## Integration Changelogs + +| Integration | Package | Description | +|---|---|---| +| [LiteLLM](integrations/litellm.md) | `hindsight-litellm` | Universal LLM memory via LiteLLM (100+ providers) | +| [Pydantic AI](integrations/pydantic-ai.md) | `hindsight-pydantic-ai` | Persistent memory tools for Pydantic AI agents | +| [CrewAI](integrations/crewai.md) | `hindsight-crewai` | Persistent memory for CrewAI agents | +| [AI SDK](integrations/ai-sdk.md) | `@vectorize-io/hindsight-ai-sdk` | Memory integration for Vercel AI SDK | +| [Chat SDK](integrations/chat.md) | `@vectorize-io/hindsight-chat` | Memory integration for Vercel Chat SDK | +| [OpenClaw](integrations/openclaw.md) | `@vectorize-io/hindsight-openclaw` | Hindsight memory plugin for OpenClaw | diff --git a/skills/hindsight-docs/references/changelog/integrations/ai-sdk.md b/skills/hindsight-docs/references/changelog/integrations/ai-sdk.md index 88904c38..f9aae12a 100644 --- a/skills/hindsight-docs/references/changelog/integrations/ai-sdk.md +++ b/skills/hindsight-docs/references/changelog/integrations/ai-sdk.md @@ -2,10 +2,8 @@ hide_table_of_contents: true --- -# AI SDK Integration Changelog +import PageHero from '@site/src/components/PageHero'; -Changelog for [`@vectorize-io/hindsight-ai-sdk`](https://www.npmjs.com/package/@vectorize-io/hindsight-ai-sdk) — memory integration for Vercel AI SDK. + -For the source code, see [`hindsight-integrations/ai-sdk`](https://github.com/vectorize-io/hindsight/tree/main/hindsight-integrations/ai-sdk). - -← [Back to main changelog](../index.md) +[← Vercel AI SDK integration](../../sdks/integrations/ai-sdk.md) diff --git a/skills/hindsight-docs/references/changelog/integrations/chat.md b/skills/hindsight-docs/references/changelog/integrations/chat.md index bf146550..432dae90 100644 --- a/skills/hindsight-docs/references/changelog/integrations/chat.md +++ b/skills/hindsight-docs/references/changelog/integrations/chat.md @@ -2,10 +2,8 @@ hide_table_of_contents: true --- -# Chat SDK Integration Changelog +import PageHero from '@site/src/components/PageHero'; -Changelog for [`@vectorize-io/hindsight-chat`](https://www.npmjs.com/package/@vectorize-io/hindsight-chat) — memory integration for Vercel Chat SDK. + -For the source code, see [`hindsight-integrations/chat`](https://github.com/vectorize-io/hindsight/tree/main/hindsight-integrations/chat). - -← [Back to main changelog](../index.md) +[← Vercel Chat SDK integration](../../sdks/integrations/chat.md) diff --git a/skills/hindsight-docs/references/changelog/integrations/crewai.md b/skills/hindsight-docs/references/changelog/integrations/crewai.md index 0a5a08cc..ef6b57fc 100644 --- a/skills/hindsight-docs/references/changelog/integrations/crewai.md +++ b/skills/hindsight-docs/references/changelog/integrations/crewai.md @@ -2,10 +2,8 @@ hide_table_of_contents: true --- -# CrewAI Integration Changelog +import PageHero from '@site/src/components/PageHero'; -Changelog for [`hindsight-crewai`](https://pypi.org/project/hindsight-crewai/) — persistent memory for CrewAI agents. + -For the source code, see [`hindsight-integrations/crewai`](https://github.com/vectorize-io/hindsight/tree/main/hindsight-integrations/crewai). - -← [Back to main changelog](../index.md) +[← CrewAI integration](../../sdks/integrations/crewai.md) diff --git a/skills/hindsight-docs/references/changelog/integrations/langgraph.md b/skills/hindsight-docs/references/changelog/integrations/langgraph.md new file mode 100644 index 00000000..746f5551 --- /dev/null +++ b/skills/hindsight-docs/references/changelog/integrations/langgraph.md @@ -0,0 +1,15 @@ +--- +hide_table_of_contents: true +--- + +import PageHero from '@site/src/components/PageHero'; + + + +[← LangGraph integration](../../sdks/integrations/langgraph.md) + +## [0.1.1](https://github.com/vectorize-io/hindsight/tree/integrations/langgraph/v0.1.1) + +**Features** + +- Added LangGraph integration for Hindsight. ([`b4320254`](https://github.com/vectorize-io/hindsight/commit/b4320254)) diff --git a/skills/hindsight-docs/references/changelog/integrations/litellm.md b/skills/hindsight-docs/references/changelog/integrations/litellm.md index f5d18623..045bd750 100644 --- a/skills/hindsight-docs/references/changelog/integrations/litellm.md +++ b/skills/hindsight-docs/references/changelog/integrations/litellm.md @@ -2,10 +2,8 @@ hide_table_of_contents: true --- -# LiteLLM Integration Changelog +import PageHero from '@site/src/components/PageHero'; -Changelog for [`hindsight-litellm`](https://pypi.org/project/hindsight-litellm/) — universal LLM memory integration via LiteLLM. + -For the source code, see [`hindsight-integrations/litellm`](https://github.com/vectorize-io/hindsight/tree/main/hindsight-integrations/litellm). - -← [Back to main changelog](../index.md) +[← LiteLLM integration](../../sdks/integrations/litellm.md) diff --git a/skills/hindsight-docs/references/changelog/integrations/nemoclaw.md b/skills/hindsight-docs/references/changelog/integrations/nemoclaw.md new file mode 100644 index 00000000..40835925 --- /dev/null +++ b/skills/hindsight-docs/references/changelog/integrations/nemoclaw.md @@ -0,0 +1,15 @@ +--- +hide_table_of_contents: true +--- + +import PageHero from '@site/src/components/PageHero'; + + + +[← NemoClaw integration](../../sdks/integrations/nemoclaw.md) + +## [0.1.1](https://github.com/vectorize-io/hindsight/tree/integrations/nemoclaw/v0.1.1) + +**Features** + +- Added a setup CLI package for the Hindsight nemoclaw integration. ([`d284de28`](https://github.com/vectorize-io/hindsight/commit/d284de28)) diff --git a/skills/hindsight-docs/references/changelog/integrations/openclaw.md b/skills/hindsight-docs/references/changelog/integrations/openclaw.md index c6f1a779..01e66173 100644 --- a/skills/hindsight-docs/references/changelog/integrations/openclaw.md +++ b/skills/hindsight-docs/references/changelog/integrations/openclaw.md @@ -2,10 +2,8 @@ hide_table_of_contents: true --- -# OpenClaw Integration Changelog +import PageHero from '@site/src/components/PageHero'; -Changelog for [`@vectorize-io/hindsight-openclaw`](https://www.npmjs.com/package/@vectorize-io/hindsight-openclaw) — Hindsight memory plugin for OpenClaw. + -For the source code, see [`hindsight-integrations/openclaw`](https://github.com/vectorize-io/hindsight/tree/main/hindsight-integrations/openclaw). - -← [Back to main changelog](../index.md) +[← OpenClaw integration](../../sdks/integrations/openclaw.md) diff --git a/skills/hindsight-docs/references/changelog/integrations/pydantic-ai.md b/skills/hindsight-docs/references/changelog/integrations/pydantic-ai.md index e23f751f..5123929d 100644 --- a/skills/hindsight-docs/references/changelog/integrations/pydantic-ai.md +++ b/skills/hindsight-docs/references/changelog/integrations/pydantic-ai.md @@ -2,10 +2,8 @@ hide_table_of_contents: true --- -# Pydantic AI Integration Changelog +import PageHero from '@site/src/components/PageHero'; -Changelog for [`hindsight-pydantic-ai`](https://pypi.org/project/hindsight-pydantic-ai/) — persistent memory tools for Pydantic AI agents. + -For the source code, see [`hindsight-integrations/pydantic-ai`](https://github.com/vectorize-io/hindsight/tree/main/hindsight-integrations/pydantic-ai). - -← [Back to main changelog](../index.md) +[← Pydantic AI integration](../../sdks/integrations/pydantic-ai.md) diff --git a/skills/hindsight-docs/references/developer/api/quickstart.md b/skills/hindsight-docs/references/developer/api/quickstart.md index 7616341e..603a8dea 100644 --- a/skills/hindsight-docs/references/developer/api/quickstart.md +++ b/skills/hindsight-docs/references/developer/api/quickstart.md @@ -129,7 +129,7 @@ go get github.com/vectorize-io/hindsight/hindsight-clients/go ## Integrations - +Browse all supported integrations in the Integrations Hub. ## Next Steps diff --git a/skills/hindsight-docs/references/developer/index.md b/skills/hindsight-docs/references/developer/index.md index 468a8117..e84787f8 100644 --- a/skills/hindsight-docs/references/developer/index.md +++ b/skills/hindsight-docs/references/developer/index.md @@ -117,7 +117,7 @@ These settings only affect the `reflect` operation, not `recall`. ## Integrations - +Browse all supported integrations in the Integrations Hub. ## Next Steps diff --git a/skills/hindsight-docs/references/faq.md b/skills/hindsight-docs/references/faq.md index 2bcc3a29..3ddb052f 100644 --- a/skills/hindsight-docs/references/faq.md +++ b/skills/hindsight-docs/references/faq.md @@ -1,6 +1,6 @@ -# Frequently Asked Questions + **Contents** - [What is Hindsight and how does it differ from RAG?](#what-is-hindsight-and-how-does-it-differ-from-rag) @@ -57,7 +57,7 @@ Unlike vector databases (just search) or RAG systems (document retrieval), Hinds ### Which integrations are supported? - +Browse all supported integrations in the Integrations Hub. --- diff --git a/skills/hindsight-docs/references/sdks/integrations/ai-sdk.md b/skills/hindsight-docs/references/sdks/integrations/ai-sdk.md index 4a130730..b1c6cb60 100644 --- a/skills/hindsight-docs/references/sdks/integrations/ai-sdk.md +++ b/skills/hindsight-docs/references/sdks/integrations/ai-sdk.md @@ -3,6 +3,8 @@ The `@vectorize-io/hindsight-ai-sdk` package integrates [Hindsight](https://hindsight.vectorize.io) memory with the [Vercel AI SDK](https://ai-sdk.dev). It provides five ready-to-use tools for retaining, recalling, and reflecting on long-term memories. +[View Changelog →](../../changelog/integrations/ai-sdk.md) + ## Installation ```bash diff --git a/skills/hindsight-docs/references/sdks/integrations/chat.md b/skills/hindsight-docs/references/sdks/integrations/chat.md index a35b3b18..7d7cad91 100644 --- a/skills/hindsight-docs/references/sdks/integrations/chat.md +++ b/skills/hindsight-docs/references/sdks/integrations/chat.md @@ -6,6 +6,8 @@ sidebar_position: 5 We built `@vectorize-io/hindsight-chat` to give [Vercel Chat SDK](https://github.com/vercel/chat) bots persistent, per-user memory with a single handler wrapper. The integration works across Slack, Discord, Teams, Google Chat, GitHub, and Linear — no custom plumbing required. +[View Changelog →](../../changelog/integrations/chat.md) + ## Installation ```bash diff --git a/skills/hindsight-docs/references/sdks/integrations/crewai.md b/skills/hindsight-docs/references/sdks/integrations/crewai.md index 33b28b1e..dadac731 100644 --- a/skills/hindsight-docs/references/sdks/integrations/crewai.md +++ b/skills/hindsight-docs/references/sdks/integrations/crewai.md @@ -6,6 +6,8 @@ sidebar_position: 5 Persistent memory for AI agent crews via [CrewAI](https://github.com/crewAIInc/crewAI). Give your crews long-term memory with fact extraction, entity tracking, and temporal awareness. +[View Changelog →](../../changelog/integrations/crewai.md) + ## Features - **Drop-in Storage Backend** - Implements CrewAI's `Storage` interface for `ExternalMemory` diff --git a/skills/hindsight-docs/references/sdks/integrations/langgraph.md b/skills/hindsight-docs/references/sdks/integrations/langgraph.md new file mode 100644 index 00000000..1d378c77 --- /dev/null +++ b/skills/hindsight-docs/references/sdks/integrations/langgraph.md @@ -0,0 +1,317 @@ +--- +sidebar_position: 7 +--- + +# LangGraph / LangChain + +Persistent long-term memory for [LangGraph](https://langchain-ai.github.io/langgraph/) and [LangChain](https://python.langchain.com/) agents via Hindsight. Three integration patterns at different abstraction levels — the tools pattern works with both LangChain and LangGraph, while nodes and the BaseStore adapter are LangGraph-specific. + +[View Changelog →](../../changelog/integrations/langgraph.md) + +## Features + +- **Memory Tools** — retain, recall, and reflect as LangChain `@tool` functions compatible with `bind_tools()` and `ToolNode`. Works with **both LangChain and LangGraph** — no LangGraph dependency required for this pattern. +- **Graph Nodes** *(LangGraph)* — Pre-built nodes that auto-inject memories before LLM calls and auto-store after responses +- **BaseStore Adapter** *(LangGraph)* — Drop-in `BaseStore` implementation backed by Hindsight, for LangGraph's native memory patterns +- **Dynamic Banks** — Resolve bank IDs per-request from `RunnableConfig` for per-user memory +- **Async-Native** — Uses `aretain`, `arecall`, `areflect` directly — no thread-pool workarounds + +## Installation + +```bash +pip install hindsight-langgraph +``` + +## Quick Start: Tools (LangChain & LangGraph) + +The tools pattern creates standard LangChain `@tool` functions that work with any LangChain-compatible model via `bind_tools()`. You can use them with a LangGraph agent or with plain LangChain — no LangGraph required. + +**With LangGraph (recommended):** + +```python +from hindsight_client import Hindsight +from hindsight_langgraph import create_hindsight_tools +from langchain_openai import ChatOpenAI +from langgraph.prebuilt import create_react_agent + +client = Hindsight(base_url="http://localhost:8888") +tools = create_hindsight_tools(client=client, bank_id="user-123") + +agent = create_react_agent(ChatOpenAI(model="gpt-4o"), tools=tools) + +result = await agent.ainvoke( + {"messages": [{"role": "user", "content": "Remember that I prefer dark mode"}]} +) +``` + +**With plain LangChain:** + +```python +from hindsight_client import Hindsight +from hindsight_langgraph import create_hindsight_tools +from langchain_openai import ChatOpenAI + +client = Hindsight(base_url="http://localhost:8888") +tools = create_hindsight_tools(client=client, bank_id="user-123") + +model = ChatOpenAI(model="gpt-4o").bind_tools(tools) +response = await model.ainvoke("Remember that I prefer dark mode") +``` + +When using plain LangChain, you handle the tool execution loop yourself — call the model, check for `tool_calls`, execute them, and feed results back. LangGraph automates this loop for you. + +The agent gets three tools it can call: + +- **`hindsight_retain`** — Store information to long-term memory +- **`hindsight_recall`** — Search long-term memory for relevant facts +- **`hindsight_reflect`** — Synthesize a reasoned answer from memories + +## Quick Start: Memory Nodes (LangGraph) + +Add recall and retain nodes to your graph for automatic memory injection and storage. + +```python +from hindsight_client import Hindsight +from hindsight_langgraph import create_recall_node, create_retain_node +from langgraph.graph import StateGraph, MessagesState, START, END + +client = Hindsight(base_url="http://localhost:8888") + +recall = create_recall_node(client=client, bank_id="user-123") +retain = create_retain_node(client=client, bank_id="user-123") + +builder = StateGraph(MessagesState) +builder.add_node("recall", recall) +builder.add_node("agent", agent_node) # your LLM node +builder.add_node("retain", retain) + +builder.add_edge(START, "recall") +builder.add_edge("recall", "agent") +builder.add_edge("agent", "retain") +builder.add_edge("retain", END) + +graph = builder.compile() +``` + +The recall node extracts the latest user message, searches Hindsight, and injects matching memories as a `SystemMessage`. The retain node stores human messages (optionally AI messages too) after the response. + +## Quick Start: BaseStore (LangGraph) + +Use Hindsight as a LangGraph `BaseStore` for cross-thread persistent memory with semantic search. + +```python +from hindsight_client import Hindsight +from hindsight_langgraph import HindsightStore + +client = Hindsight(base_url="http://localhost:8888") +store = HindsightStore(client=client) + +graph = builder.compile(checkpointer=checkpointer, store=store) + +# Store and search via the store API +await store.aput(("user", "123", "prefs"), "theme", {"value": "dark mode"}) +results = await store.asearch(("user", "123", "prefs"), query="theme preference") +``` + +Namespace tuples are mapped to Hindsight bank IDs with `.` as separator (e.g., `("user", "123")` becomes bank `user.123`). Banks are auto-created on first access. + +## Dynamic Bank IDs + +Both nodes and the store support per-user bank resolution from `RunnableConfig`: + +```python +recall = create_recall_node(client=client, bank_id_from_config="user_id") +retain = create_retain_node(client=client, bank_id_from_config="user_id") + +# Bank ID resolved at runtime from config +result = await graph.ainvoke( + {"messages": [{"role": "user", "content": "hello"}]}, + config={"configurable": {"user_id": "user-456"}}, +) +``` + +## Selecting Tools + +Include only the tools you need: + +```python +tools = create_hindsight_tools( + client=client, + bank_id="user-123", + include_retain=True, + include_recall=True, + include_reflect=False, # Omit reflect +) +``` + +## Global Configuration + +Instead of passing a client to every call, configure once: + +```python +from hindsight_langgraph import configure, create_hindsight_tools + +configure( + hindsight_api_url="http://localhost:8888", + api_key="your-api-key", # Or set HINDSIGHT_API_KEY env var + budget="mid", # Recall budget: low/mid/high + max_tokens=4096, # Max tokens for recall results + tags=["env:prod"], # Tags for stored memories + recall_tags=["scope:global"], # Tags to filter recall + recall_tags_match="any", # Tag match mode: any/all/any_strict/all_strict +) + +# Now create tools without passing client — uses global config +tools = create_hindsight_tools(bank_id="user-123") +``` + +## Retain Node Options + +```python +retain = create_retain_node( + client=client, + bank_id="user-123", + retain_human=True, # Store human messages (default: True) + retain_ai=False, # Store AI responses (default: False) + tags=["source:chat"], # Tags applied to stored memories +) +``` + +## Recall Node Options + +```python +recall = create_recall_node( + client=client, + bank_id="user-123", + budget="low", # Recall budget: low/mid/high + max_results=10, # Max memories injected + max_tokens=4096, # Max tokens for recall + tags=["scope:user"], # Filter by tags + tags_match="all", # Tag match mode +) +``` + +### Using `output_key` for Prompt Control + +By default, the recall node appends a `SystemMessage` to `messages`. Use `output_key` to write memory text to a custom state field instead, giving you full control over prompt ordering: + +```python +from typing import Optional +from langgraph.graph import MessagesState + +class AgentState(MessagesState): + memory_context: Optional[str] = None + +recall = create_recall_node( + client=client, + bank_id="user-123", + output_key="memory_context", +) + +# In your agent node, read state["memory_context"] and prepend it +# to the system prompt before calling the model. +``` + +## Limitations and Notes + +### HindsightStore + +- **Async-only.** All sync methods (`batch`, `get`, `put`, `delete`, `search`, `list_namespaces`) raise `NotImplementedError`. Use the async variants (`abatch`, `aget`, `aput`, `adelete`, `asearch`, `alist_namespaces`) instead. +- **`get()` relies on recall.** There is no direct key lookup — the key is used as a recall query and only exact `document_id` matches are returned. Items that do not rank in the top recall results may appear missing. +- **`list_namespaces` is session-scoped.** It only tracks namespaces that have been written to via `aput()` during the current process. After a restart, `list_namespaces` returns empty even though data still exists in Hindsight. +- **`delete` is a no-op.** Calling `adelete()` logs a debug message but does not remove data from Hindsight. Hindsight's memory model is append-oriented; fact superseding is handled automatically during retain. + +### Memory Nodes + +- **SystemMessage ordering.** The recall node adds a `SystemMessage` with recalled memories. Because `MessagesState` uses `add_messages` (which appends), this message appears after existing messages rather than at position 0. The message has a stable ID (`hindsight_memory_context`) so it is updated rather than duplicated across invocations. If your LLM provider requires system messages first, sort or filter messages in your agent node before passing them to the model. + +### Error Handling + +- **Tools** raise `HindsightError` on failure, which surfaces to the agent as a tool error. +- **Nodes** silently log errors and return empty messages, so a Hindsight outage does not crash your graph. + +## API Reference + +### `create_hindsight_tools()` + +| Parameter | Default | Description | +|---|---|---| +| `bank_id` | *required* | Hindsight memory bank ID | +| `client` | `None` | Pre-configured Hindsight client | +| `hindsight_api_url` | `None` | API URL (used if no client provided) | +| `api_key` | `None` | API key (used if no client provided) | +| `budget` | `"mid"` | Recall/reflect budget level (low/mid/high) | +| `max_tokens` | `4096` | Maximum tokens for recall results | +| `tags` | `None` | Tags applied when storing memories | +| `recall_tags` | `None` | Tags to filter when searching | +| `recall_tags_match` | `"any"` | Tag matching mode (any/all/any\_strict/all\_strict) | +| `retain_metadata` | `None` | Default metadata dict for retain operations | +| `retain_document_id` | `None` | Default document\_id for retain (groups/upserts memories) | +| `recall_types` | `None` | Fact types to filter (world, experience, opinion, observation) | +| `recall_include_entities` | `False` | Include entity information in recall results | +| `reflect_context` | `None` | Additional context for reflect operations | +| `reflect_max_tokens` | `None` | Max tokens for reflect results (defaults to `max_tokens`) | +| `reflect_response_schema` | `None` | JSON schema to constrain reflect output format | +| `reflect_tags` | `None` | Tags to filter memories used in reflect (defaults to `recall_tags`) | +| `reflect_tags_match` | `None` | Tag matching for reflect (defaults to `recall_tags_match`) | +| `include_retain` | `True` | Include the retain (store) tool | +| `include_recall` | `True` | Include the recall (search) tool | +| `include_reflect` | `True` | Include the reflect (synthesize) tool | + +### `create_recall_node()` + +| Parameter | Default | Description | +|---|---|---| +| `bank_id` | `None` | Static bank ID (or use `bank_id_from_config`) | +| `client` | `None` | Pre-configured Hindsight client | +| `hindsight_api_url` | `None` | API URL (used if no client provided) | +| `api_key` | `None` | API key (used if no client provided) | +| `budget` | `"mid"` | Recall budget level | +| `max_tokens` | `4096` | Max tokens for recall results | +| `max_results` | `10` | Max memories to inject | +| `tags` | `None` | Tags to filter recall results | +| `tags_match` | `"any"` | Tag matching mode | +| `bank_id_from_config` | `"user_id"` | Config key to resolve bank ID at runtime | +| `output_key` | `None` | If set, write memory text to this state key instead of appending a SystemMessage to `messages` | + +### `create_retain_node()` + +| Parameter | Default | Description | +|---|---|---| +| `bank_id` | `None` | Static bank ID (or use `bank_id_from_config`) | +| `client` | `None` | Pre-configured Hindsight client | +| `hindsight_api_url` | `None` | API URL (used if no client provided) | +| `api_key` | `None` | API key (used if no client provided) | +| `tags` | `None` | Tags applied to stored memories | +| `bank_id_from_config` | `"user_id"` | Config key to resolve bank ID at runtime | +| `retain_human` | `True` | Store human messages | +| `retain_ai` | `False` | Store AI responses | + +### `HindsightStore()` + +| Parameter | Default | Description | +|---|---|---| +| `client` | `None` | Pre-configured Hindsight client | +| `hindsight_api_url` | `None` | API URL (used if no client provided) | +| `api_key` | `None` | API key (used if no client provided) | +| `tags` | `None` | Tags applied to all retain operations | + +### `configure()` + +| Parameter | Default | Description | +|---|---|---| +| `hindsight_api_url` | Production API | Hindsight API URL | +| `api_key` | `HINDSIGHT_API_KEY` env | API key for authentication | +| `budget` | `"mid"` | Default recall budget level | +| `max_tokens` | `4096` | Default max tokens for recall | +| `tags` | `None` | Default tags for retain operations | +| `recall_tags` | `None` | Default tags to filter recall | +| `recall_tags_match` | `"any"` | Default tag matching mode | +| `verbose` | `False` | Enable verbose logging | + +## Requirements + +- Python >= 3.10 +- langchain-core >= 0.3.0 +- hindsight-client >= 0.4.0 +- langgraph >= 0.3.0 *(only for nodes and store patterns — install with `pip install hindsight-langgraph[langgraph]`)* diff --git a/skills/hindsight-docs/references/sdks/integrations/litellm.md b/skills/hindsight-docs/references/sdks/integrations/litellm.md index 31ecbcde..c111ecb7 100644 --- a/skills/hindsight-docs/references/sdks/integrations/litellm.md +++ b/skills/hindsight-docs/references/sdks/integrations/litellm.md @@ -6,6 +6,8 @@ sidebar_position: 1 Universal LLM memory integration via [LiteLLM](https://github.com/BerriAI/litellm). Add persistent memory to any LLM application with just a few lines of code. +[View Changelog →](../../changelog/integrations/litellm.md) + ## Features - **Universal LLM Support** - Works with 100+ LLM providers via LiteLLM (OpenAI, Anthropic, Groq, Azure, AWS Bedrock, Google Vertex AI, and more) diff --git a/skills/hindsight-docs/references/sdks/integrations/nemoclaw.md b/skills/hindsight-docs/references/sdks/integrations/nemoclaw.md new file mode 100644 index 00000000..153671da --- /dev/null +++ b/skills/hindsight-docs/references/sdks/integrations/nemoclaw.md @@ -0,0 +1,248 @@ +--- +sidebar_position: 5 +--- + +# NemoClaw + +Persistent memory for [NemoClaw](https://nemoclaw.ai) sandboxed agents using [Hindsight](https://hindsight.vectorize.io). + +NemoClaw runs [OpenClaw](https://openclaw.ai) inside an OpenShell sandbox with controlled filesystem, process, and network egress policies. The `hindsight-nemoclaw` package automates adding Hindsight memory to a sandbox in one command — no code changes required. + +[View Changelog →](../../changelog/integrations/nemoclaw.md) + +## Quick Start + +```bash +npx @vectorize-io/hindsight-nemoclaw setup \ + --sandbox my-assistant \ + --api-url https://api.hindsight.vectorize.io \ + --api-token \ + --bank-prefix my-sandbox +``` + +Get an API key at [Hindsight Cloud](https://ui.hindsight.vectorize.io/signup). + +You'll see output like: + +``` +[0] Preflight checks... + ✓ openshell found + ✓ openclaw found + +[1] Installing @vectorize-io/hindsight-openclaw plugin... + ✓ Plugin installed + +[2] Configuring plugin in ~/.openclaw/openclaw.json... + ✓ Plugin config written (bank: my-sandbox-openclaw) + +[3] Applying Hindsight network policy to sandbox "my-assistant"... + ✓ Policy version 2 submitted + ✓ Policy version 2 loaded (active version: 2) + +[4] Restarting OpenClaw gateway... + ✓ Gateway restarted + +✓ Setup complete! +``` + +## How It Works + +### The sandbox problem + +OpenShell enforces strict network egress — every outbound endpoint must be explicitly permitted in the sandbox policy. By default, the Hindsight API (`api.hindsight.vectorize.io`) is not in that list. + +The `hindsight-openclaw` plugin supports **external API mode**, where it skips the local daemon entirely and makes direct HTTPS calls to Hindsight Cloud. This is the natural fit for sandboxed environments: the plugin becomes a thin HTTP client, and the only sandbox change needed is one egress rule. + +### What the setup command does + +1. **Preflight** — verifies `openshell` and `openclaw` are installed +2. **Install plugin** — runs `openclaw plugins install @vectorize-io/hindsight-openclaw` +3. **Configure plugin** — writes external API mode config to `~/.openclaw/openclaw.json` +4. **Apply policy** — reads the current sandbox policy, merges the Hindsight egress block, and re-applies via `openshell policy set` +5. **Restart gateway** — runs `openclaw gateway restart` + +### Memory flow + +Once set up, the `hindsight-openclaw` plugin hooks into the OpenClaw gateway lifecycle: + +- **`before_agent_start`** — recalls relevant memories from past sessions and injects them into context +- **`agent_end`** — retains the conversation to the Hindsight memory bank + +The sandbox doesn't interfere with either step — it sees the Hindsight calls as normal HTTPS egress to a permitted endpoint. + +## CLI Reference + +``` +hindsight-nemoclaw setup [options] + +Options: + --sandbox NemoClaw sandbox name (required) + --api-url Hindsight API URL (required) + --api-token Hindsight API token (required) + --bank-prefix Memory bank prefix (default: "nemoclaw") + --skip-policy Skip sandbox network policy update + --skip-plugin-install Skip openclaw plugin installation + --dry-run Preview changes without applying + --help Show help +``` + +Use `--dry-run` to preview all changes before applying anything. Use `--skip-policy` if you manage sandbox policies manually. + +## Manual Setup + +If you prefer to apply the steps yourself instead of using the CLI: + +### 1. Install the plugin + +```bash +openclaw plugins install @vectorize-io/hindsight-openclaw +``` + +### 2. Configure `~/.openclaw/openclaw.json` + +```json +{ + "plugins": { + "entries": { + "hindsight-openclaw": { + "enabled": true, + "config": { + "hindsightApiUrl": "https://api.hindsight.vectorize.io", + "hindsightApiToken": "", + "llmProvider": "claude-code", + "dynamicBankId": false, + "bankIdPrefix": "my-sandbox" + } + } + } + } +} +``` + +`llmProvider: "claude-code"` uses the Claude Code process already present in the sandbox — no additional API key needed. + +### 3. Add the Hindsight network policy + +`openshell policy set` replaces the entire policy document. Export your current policy first, add the Hindsight block, then re-apply: + +```yaml +network_policies: + hindsight: + name: hindsight + endpoints: + - host: api.hindsight.vectorize.io + port: 443 + protocol: rest + tls: terminate + enforcement: enforce + rules: + - allow: + method: GET + path: /** + - allow: + method: POST + path: /** + - allow: + method: PUT + path: /** + binaries: + - path: /usr/local/bin/openclaw +``` + +```bash +openshell policy set my-sandbox --policy /path/to/full-policy.yaml --wait +openclaw gateway restart +``` + +## Configuration Options + +| Option | Type | Default | Description | +|---|---|---|---| +| `hindsightApiUrl` | string | — | Hindsight API base URL | +| `hindsightApiToken` | string | — | API token for authentication | +| `llmProvider` | string | auto-detect | LLM provider for memory extraction | +| `dynamicBankId` | boolean | `false` | Isolate memory per user (`true`) or share across sessions (`false`) | +| `bankIdPrefix` | string | `"nemoclaw"` | Prefix for the memory bank name | + +### Bank naming + +When `dynamicBankId: false`, all sessions write to a single bank named `{bankIdPrefix}-openclaw`. When `dynamicBankId: true`, each user gets an isolated bank — useful for multi-tenant deployments. + +## Verifying It Works + +After setup, check the gateway logs: + +```bash +tail -f /tmp/openclaw/openclaw-*.log | grep Hindsight +``` + +On startup you should see: + +``` +[Hindsight] Plugin loaded successfully +[Hindsight] ✓ Using external API: https://api.hindsight.vectorize.io +[Hindsight] External API health: {"status":"healthy","database":"connected"} +[Hindsight] Default bank: my-sandbox-openclaw +[Hindsight] ✓ Ready (external API mode) +``` + +After a conversation: + +``` +[Hindsight] before_agent_start - bank: my-sandbox-openclaw, channel: undefined/webchat +[Hindsight Hook] agent_end triggered - bank: my-sandbox-openclaw +[Hindsight] Retained 6 messages to bank my-sandbox-openclaw for session agent:main:... +``` + +## Pitfalls + +### Policy replacement is full-document + +`openshell policy set` replaces the entire policy document. The `hindsight-nemoclaw setup` command handles this automatically. If you're applying manually, export the current policy first so existing rules aren't lost. + +### LaunchAgent can't follow symlinks on macOS + +On macOS, the OpenClaw gateway runs as a LaunchAgent under a restricted security context. `openclaw plugins install --link` creates a symlink the LaunchAgent can't follow — the setup command installs as a copy instead. If you see `EPERM: operation not permitted, scandir` in gateway logs, this is the cause. + +### Memory retention is asynchronous + +Fact extraction and entity resolution happen in the background after `retain`. If you open a new session immediately after closing one, the most recent memories may not be indexed yet — typically a few seconds. + +### Binary-scoped egress + +The `binaries` field in the network policy restricts the egress rule to a specific executable path. If OpenClaw updates and the binary path changes, the rule silently stops working. Check your binary path after upgrades. + +## Troubleshooting + +### Plugin not loading + +```bash +openclaw plugins list | grep hindsight +# Should show: ✓ enabled │ Hindsight Memory │ ... + +# Reinstall +openclaw plugins install @vectorize-io/hindsight-openclaw +``` + +### Egress blocked + +If calls to `api.hindsight.vectorize.io` are being blocked, check the active sandbox policy: + +```bash +openshell sandbox get my-assistant +``` + +Verify the `hindsight` block is present and the `binaries` path matches your OpenClaw binary: + +```bash +which openclaw +``` + +### External API not connecting + +```bash +tail -f /tmp/openclaw/openclaw-*.log | grep Hindsight + +# If you see daemon startup messages instead of "Using external API", +# the plugin config isn't being read — check ~/.openclaw/openclaw.json +``` diff --git a/skills/hindsight-docs/references/sdks/integrations/openclaw.md b/skills/hindsight-docs/references/sdks/integrations/openclaw.md index cd894c7d..609bc4f1 100644 --- a/skills/hindsight-docs/references/sdks/integrations/openclaw.md +++ b/skills/hindsight-docs/references/sdks/integrations/openclaw.md @@ -8,6 +8,8 @@ Local, long term memory for [OpenClaw](https://openclaw.ai) agents using [Hindsi This plugin integrates [hindsight-embed](https://vectorize.io/hindsight/cli), a standalone daemon that bundles Hindsight's memory engine (API + PostgreSQL) into a single command. Everything runs locally on your machine, reuses the LLM you're already paying for, and costs nothing extra. +[View Changelog →](../../changelog/integrations/openclaw.md) + ## Quick Start **Step 1: Set up LLM for memory extraction** diff --git a/skills/hindsight-docs/references/sdks/integrations/pydantic-ai.md b/skills/hindsight-docs/references/sdks/integrations/pydantic-ai.md index 8f6e6baa..3f3647e9 100644 --- a/skills/hindsight-docs/references/sdks/integrations/pydantic-ai.md +++ b/skills/hindsight-docs/references/sdks/integrations/pydantic-ai.md @@ -6,6 +6,8 @@ sidebar_position: 6 Persistent memory tools for [Pydantic AI](https://ai.pydantic.dev/) agents via Hindsight. Give your agents long-term memory with retain, recall, and reflect — all async-native with no thread-pool hacks. +[View Changelog →](../../changelog/integrations/pydantic-ai.md) + ## Features - **Async-Native Tools** — Uses Pydantic AI's async tool interface directly (`aretain`, `arecall`, `areflect`)