# Engram

Engram is a memory server for LLM agents and applications. It provides a [REST API](/engram/api/rest) and [Python SDK](https://github.com/weaviate/engram-python-sdk) that automatically extracts, transforms, and stores memories using vector embeddings and LLM-powered processing.

Use Engram to give your agents persistent memory that they can write to and search across conversations, users, and [topics](../engram-concepts/topics.md).

## Key capabilities

- **Automatic memory extraction** — Send raw text, pre-extracted facts, or full conversations. Engram's [pipeline](../engram-concepts/pipelines.md) extracts and stores structured [memories](../engram-concepts/memories.md) automatically.
- **Semantic search** — Find relevant memories using vector similarity, BM25 keyword search, or [hybrid retrieval](../engram-concepts/search.md).
- **Scoped memory** — Isolate memories by project, user, and any custom scope properties (e.g. `conversation_id`). [Topics](../engram-concepts/topics.md) let you categorize memories within a [group](../engram-concepts/groups.md).
- **Async processing** — Memory storage runs asynchronously through a pipeline. Poll [run status](../engram-guides/check-run-status.md) to track when memories are committed.

## How it works

Below is an overview of Engram's architecture and information flow:

![Weaviate Engram architecture](/assets/docs/engram/_includes/architecture.png)

Your app communicates with Engram through the REST API or Python SDK.

**[Storing memories](../engram-guides/store-memories.md):** You send content (text, a conversation, or pre-extracted facts) to the API. Engram immediately returns a `run_id` and processes the content asynchronously through a [pipeline](../engram-concepts/pipelines.md):

1. **Extract** — Pull individual facts from the input.
2. **Transform** — Deduplicate and merge with existing [memories](../engram-concepts/memories.md).
3. **Commit** — Persist the results to the memory store.

You can poll the [`run_id`](../engram-guides/check-run-status.md) to check when processing is complete.

**[Searching memories](../engram-guides/search-memories.md):** You send a query to the API with a [retrieval type](../engram-concepts/search.md) (vector, BM25, or hybrid). Engram searches the memory store and returns ranked results.

## Get started

- **[Quickstart](quickstart.md)** — Create a project, get an API key, store your first memory, and search it.
- **[Concepts](../engram-concepts/index.md)** — Understand memories, topics, groups, scoping, and pipelines.
- **[Guides](../engram-guides/index.md)** — Step-by-step instructions for storing, searching, and managing memories.
- **[REST API reference](/engram/api/rest)** — Full endpoint documentation with request and response schemas.

## Questions and feedback

Have a question or feedback? Here's how to reach us.

::::card-grid
:::card{title="Community Forum" href="https://forum.weaviate.io/c/support" icon="messages-square"}
Ask questions and connect with other developers on our **Community forum**.
:::

:::card{title="Support" href="/guides/support-overview" icon="life-buoy"}
Weaviate Cloud user or customer? Find the right channel on the **Support page**.
:::
::::

## Related pages

- [Agents](./agents-index.md)
- [AI-assisted Weaviate code generation](./ai-assisted-vibe-coding-index.md)
- [APIs](./apis-index.md)
- [Authorization and authentication](./authorization-and-authentication-index.md)
- [Benchmarks](./benchmarks-index.md)
- [Best practices](./best-practices-index.md)
- [Client libraries](./clients-index.md)
- [Client Libraries / SDKs](./client-libraries-index.md)
- [Cloud](./cloud-index.md)
- [Cloud account management](./cloud-account-management-index.md)

# Agent Instructions

This portal answers questions programmatically. To receive a synthesized,
source-cited answer instead of crawling page by page, append the `?ask=`
query parameter to any page URL on this site:

    /guides/quickstart?ask=how+do+I+authenticate

Optional parameters:

- `&goal=<what-you-are-trying-to-do>` steers the answer toward your
  objective (e.g. `&goal=write+a+python+client`).
- `&version=<label>` scopes the answer to a mounted version when the
  portal publishes more than one.

The response is `text/markdown`: the answer followed by a `# Sources` list
of the portal pages it was grounded in. Status codes are the contract:

- `200` — the answer; `402` — the portal owner’s plan or answer credits are
  exhausted (surface this to your operator; do NOT retry); `429` — you are
  rate-limited; back off for the `Retry-After` seconds; `503` — the answer
  lane is temporarily unavailable; fall back to crawling the `.md` pages.

For the full corpus map read `llms.txt` at the site root; for the tool
surface (search + page fetch as MCP tools) see `/mcp`.
