Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 35 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ jobs:
integrations-llamaindex: ${{ steps.filter.outputs.integrations-llamaindex }}
integrations-paperclip: ${{ steps.filter.outputs.integrations-paperclip }}
integrations-opencode: ${{ steps.filter.outputs.integrations-opencode }}
integrations-eve: ${{ steps.filter.outputs.integrations-eve }}
integrations-cursor: ${{ steps.filter.outputs.integrations-cursor }}
integrations-zed: ${{ steps.filter.outputs.integrations-zed }}
integrations-n8n: ${{ steps.filter.outputs.integrations-n8n }}
Expand Down Expand Up @@ -166,6 +167,8 @@ jobs:
- 'hindsight-integrations/paperclip/**'
integrations-opencode:
- 'hindsight-integrations/opencode/**'
integrations-eve:
- 'hindsight-integrations/eve/**'
integrations-cursor:
- 'hindsight-integrations/cursor/**'
integrations-zed:
Expand Down Expand Up @@ -745,6 +748,37 @@ jobs:
working-directory: ./hindsight-integrations/opencode
run: npm run build

test-eve-integration:
needs: [detect-changes]
if: >-
(github.event_name == 'workflow_dispatch' ||
needs.detect-changes.outputs.integrations-eve == 'true' ||
needs.detect-changes.outputs.ci == 'true')
runs-on: ubuntu-latest
timeout-minutes: 30

steps:
- uses: actions/checkout@v6
with:
ref: ${{ github.event.pull_request.head.sha || '' }}

- name: Set up Node.js
uses: actions/setup-node@v6
with:
node-version: '24'

- name: Install dependencies
working-directory: ./hindsight-integrations/eve
run: npm ci

- name: Run tests
working-directory: ./hindsight-integrations/eve
run: npm test

- name: Build
working-directory: ./hindsight-integrations/eve
run: npm run build

test-n8n-integration:
needs: [detect-changes]
if: >-
Expand Down Expand Up @@ -4751,6 +4785,7 @@ jobs:
- build-ai-sdk-integration
- test-ai-sdk-integration-deno
- test-opencode-integration
- test-eve-integration
- test-omo-integration
- test-cloudflare-oauth-proxy-integration
- build-chat-integration
Expand Down
1 change: 1 addition & 0 deletions hindsight-dev/hindsight_dev/generate_changelog.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ class IntegrationMeta:
"autogen": IntegrationMeta("hindsight-autogen", "AutoGen"),
"paperclip": IntegrationMeta("@vectorize-io/hindsight-paperclip", "Paperclip"),
"opencode": IntegrationMeta("@vectorize-io/opencode-hindsight", "OpenCode"),
"eve": IntegrationMeta("@vectorize-io/hindsight-eve", "Eve"),
"cloudflare-oauth-proxy": IntegrationMeta("hindsight-cloudflare-oauth-proxy"),
"openai-agents": IntegrationMeta("hindsight-openai-agents"),
"pipecat": IntegrationMeta("hindsight-pipecat", "Pipecat"),
Expand Down
84 changes: 84 additions & 0 deletions hindsight-docs/docs-integrations/eve.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
---
sidebar_position: 38
title: "Eve Agent Memory with Hindsight | Integration"
description: "Add long-term memory to Vercel Eve agents with Hindsight. A one-line MCP connection gives your agent retain, recall, and reflect across sessions."
---

# Eve

Long-term memory for [Vercel Eve](https://github.com/vercel/eve) agents using [Hindsight](https://vectorize.io/hindsight). Eve is filesystem-first — an agent gains a capability by dropping a file under `agent/connections/`. The `@vectorize-io/hindsight-eve` package wraps Eve's `defineMcpClientConnection`, so one file gives your agent `retain`, `recall`, and `reflect` over Hindsight's MCP server and it remembers across sessions and deployments.

## Install

```bash
npm install @vectorize-io/hindsight-eve
```

`eve` is a peer dependency you already have in an Eve project.

## Quick Start

Create `agent/connections/hindsight.ts`:

```ts
import { defineHindsightConnection } from "@vectorize-io/hindsight-eve";

export default defineHindsightConnection();
```

The connection reads its defaults from the environment:

| Env var | Purpose |
| ----------------------- | ---------------------------------------------------------------- |
| `HINDSIGHT_API_KEY` | Bearer token sent as `Authorization: Bearer <key>` |
| `HINDSIGHT_MCP_URL` | MCP endpoint (defaults to Hindsight Cloud) |
| `HINDSIGHT_MCP_BANK_ID` | Optional bank to scope memory to, sent as the `X-Bank-Id` header |

The model discovers the tools via Eve's `connection__search` and calls them as `connection__hindsight__recall`, `connection__hindsight__retain`, and `connection__hindsight__reflect`. The connection's URL and token never reach the model.

### Hindsight Cloud

Set `HINDSIGHT_API_KEY` from your [Hindsight Cloud](https://hindsight.vectorize.io) dashboard. The connection defaults to `https://api.hindsight.vectorize.io/mcp`, so no URL is needed.

### Self-hosted

Point at your own server, optionally scoping to a bank. Use `apiKey: null` for a no-auth local server:

```ts
import { defineHindsightConnection } from "@vectorize-io/hindsight-eve";

export default defineHindsightConnection({
url: "http://localhost:8000/mcp",
apiKey: null,
});
```

## Options

```ts
defineHindsightConnection({
url, // MCP endpoint; defaults to HINDSIGHT_MCP_URL, then Cloud
apiKey, // bearer token; null = no auth (local dev)
bankId, // scope memory to a bank (X-Bank-Id header)
description, // override the model-facing description
tools, // { allow } | { block } — narrow which Hindsight tools the model sees
approval, // human-in-the-loop policy, e.g. once() from "eve/tools/approval"
});
```

Restrict the agent to read-only recall and require approval the first time:

```ts
import { defineHindsightConnection } from "@vectorize-io/hindsight-eve";
import { once } from "eve/tools/approval";

export default defineHindsightConnection({
tools: { allow: ["recall", "reflect"] },
approval: once(),
});
```

## Links

- [Hindsight docs](https://hindsight.vectorize.io)
- [Eve connections](https://github.com/vercel/eve/blob/main/docs/connections.mdx)
10 changes: 10 additions & 0 deletions hindsight-docs/src/data/integrations.json
Original file line number Diff line number Diff line change
Expand Up @@ -340,6 +340,16 @@
"link": "/sdks/integrations/opencode",
"icon": "/img/icons/opencode.png"
},
{
"id": "eve",
"name": "Eve",
"description": "Long-term memory for Vercel Eve agents. A one-line MCP connection exposing retain, recall, and reflect.",
"type": "official",
"by": "hindsight",
"category": "framework",
"link": "/sdks/integrations/eve",
"icon": "/img/icons/eve.svg"
},
{
"id": "n8n",
"name": "n8n",
Expand Down
4 changes: 4 additions & 0 deletions hindsight-docs/static/img/icons/eve.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
30 changes: 30 additions & 0 deletions hindsight-integrations/eve/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# Dependencies
node_modules/

# Build output
dist/

# Test coverage
coverage/

# IDE
.vscode/
.idea/
*.swp
*.swo
*~

# OS
.DS_Store
Thumbs.db

# Logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*

# Environment
.env
.env.local
.env.*.local
104 changes: 104 additions & 0 deletions hindsight-integrations/eve/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
# Hindsight for Eve

Long-term memory for [Vercel Eve](https://github.com/vercel/eve) agents, powered by
[Hindsight](https://vectorize.io/hindsight). One file gives your agent `retain`, `recall`,
and `reflect` over [Hindsight's MCP server](https://hindsight.vectorize.io) — so it
remembers facts across sessions and deployments instead of starting cold every time.

## How it works

Eve is filesystem-first: an agent gains a capability by dropping a file under
`agent/connections/`. This package wraps eve's `defineMcpClientConnection`, pre-filling the
Hindsight MCP endpoint, a model-facing description, and bearer auth. The model discovers the
tools through `connection__search` and calls them as `connection__hindsight__recall`,
`connection__hindsight__retain`, and `connection__hindsight__reflect`. The connection's URL
and token never reach the model.

## Install

```bash
npm install @vectorize-io/hindsight-eve
```

`eve` is a peer dependency — you already have it in an Eve project.

## Quick start

Create `agent/connections/hindsight.ts`:

```ts
import { defineHindsightConnection } from "@vectorize-io/hindsight-eve";

export default defineHindsightConnection();
```

That's it. By default the connection reads:

| Env var | Purpose |
| ----------------------- | ---------------------------------------------------------------- |
| `HINDSIGHT_API_KEY` | Bearer token sent as `Authorization: Bearer <key>` |
| `HINDSIGHT_MCP_URL` | MCP endpoint (defaults to Hindsight Cloud) |
| `HINDSIGHT_MCP_BANK_ID` | Optional bank to scope memory to, sent as the `X-Bank-Id` header |

### Hindsight Cloud

Set `HINDSIGHT_API_KEY` to a key from your [Hindsight Cloud](https://hindsight.vectorize.io)
dashboard. The connection defaults to `https://api.hindsight.vectorize.io/mcp`, so no URL is
needed.

### Self-hosted

Point at your own server and (optionally) pick a bank:

```bash
export HINDSIGHT_MCP_URL="http://localhost:8000/mcp"
export HINDSIGHT_MCP_BANK_ID="my-project"
export HINDSIGHT_API_KEY="…" # or omit and pass apiKey: null below for a no-auth server
```

```ts
import { defineHindsightConnection } from "@vectorize-io/hindsight-eve";

// A local server with no auth:
export default defineHindsightConnection({
url: "http://localhost:8000/mcp",
apiKey: null,
});
```

## Options

```ts
defineHindsightConnection({
url, // string — MCP endpoint; defaults to HINDSIGHT_MCP_URL, then Cloud
apiKey, // string | null — bearer token; null = no auth (local dev)
bankId, // string — scope memory to a bank (X-Bank-Id header)
description, // string — override the model-facing description
tools, // { allow } | { block } — narrow which Hindsight tools the model sees
approval, // human-in-the-loop policy, e.g. once() from "eve/tools/approval"
});
```

Restrict the agent to read-only recall, and require approval the first time:

```ts
import { defineHindsightConnection } from "@vectorize-io/hindsight-eve";
import { once } from "eve/tools/approval";

export default defineHindsightConnection({
tools: { allow: ["recall", "reflect"] },
approval: once(),
});
```

## Verify

With the connection in place, run your agent and ask it something it would need to look up
("what did we decide about X last week?"). Eve's `connection__search` surfaces the Hindsight
tools and the model calls `connection__hindsight__recall`. To seed memory, have the agent
`retain` a fact in one session and `recall` it in the next.

## Links

- [Hindsight docs](https://hindsight.vectorize.io)
- [Eve connections](https://github.com/vercel/eve/blob/main/docs/connections.mdx)
Loading
Loading