---
name: tanstack-ai-memory-honcho
description: Use when wiring honcho() from @tanstack/ai-memory/honcho — a hosted memory adapter where recall is a dialectic answer over the user's representation (no discrete fragments). Requires the optional @honcho-ai/sdk peer.
---

# Honcho Memory Adapter

Hosted `recall`/`save` adapter backed by Honcho. Honcho models memory as peers
exchanging messages in a session; `recall` returns a **synthesized dialectic answer**
over the user peer's representation (so there are no discrete fragments), and `save`
appends the turn's messages to the session.

## Setup

```ts
import { memoryMiddleware } from '@tanstack/ai-memory'
import { honcho } from '@tanstack/ai-memory/honcho'

// Build per request from the server-validated session — never from req.body.
function memoryFor(session: { userId: string; threadId: string }) {
  const memory = honcho({ user: session.userId }) // baseURL defaults to HONCHO_URL

  return memoryMiddleware({
    adapter: memory,
    scope: { threadId: session.threadId, userId: session.userId },
  })
}
```

`@honcho-ai/sdk` is an **optional peer dependency**, loaded lazily on first use — install
it where you use `honcho()`.

## Options

- `user` — user peer id (falls back to `scope.userId`, then `'demo-user'`).
- `baseURL` — Honcho server URL (default `HONCHO_URL` or `http://localhost:8001`).
- `workspaceId` — default `HONCHO_APP_NAME` or `'ai-memory'`.
- `apiKey` — default `HONCHO_API_KEY`.
- `assistantId` — assistant peer id (default `'assistant'`).

**Scope fields:** session key = `{tenantId|_}__{threadId}`; peer id is
`{tenantId}__{user}` when `tenantId` is set, otherwise `user` / `scope.userId`.
`namespace` is ignored.

`recall` calls the user peer's dialectic `chat()` and injects the answer as the system
prompt; Honcho exposes no LLM tools.
