# Install & integrate

There are several ways to use Engram, from calling the API directly to dropping it into an agent framework as a memory provider.

- **[Python SDK](#python-sdk)** — the `weaviate-engram` client for Python applications.
- **[REST API](#rest-api)** — call Engram over HTTP from any language.
- **[Claude Code plugin](#claude-code-plugin)** — persistent, cross-session memory for Claude Code through the `engram` plugin.
- **[Hermes Agent](#hermes-agent)** — long-term memory for the Hermes Agent through the `hermes-weaviate-engram` plugin.

Every method authenticates with an [Engram API key](quickstart.md#step-2-create-an-api-key).

## Python SDK

Install the [`weaviate-engram`](https://pypi.org/project/weaviate-engram/) client:

:::code-group{sync="python-install"}
```bash title="pip"
pip install weaviate-engram
```

```bash title="uv"
uv add weaviate-engram
```
:::

Connect with your API key, then store and search memories:

```python
import os
from engram import EngramClient

client = EngramClient(api_key=os.environ["ENGRAM_API_KEY"])
```

For an async client, use `AsyncEngramClient` instead. The [Quickstart](quickstart.md) has a full walkthrough, and the [guides](../engram-guides/store-memories.md) cover storing, searching, and managing memories. The source is on [GitHub](https://github.com/weaviate/engram-python-sdk).

## REST API

Engram is a REST service at `https://api.engram.weaviate.io`. Authenticate every request with your API key as a bearer token:

```bash
curl -X POST "https://api.engram.weaviate.io/v1/memories" \
  -H "Authorization: Bearer $ENGRAM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "input": {"string": {"content": ["The user prefers dark mode."]}},
    "user_id": "alice"
  }'
```

See the [REST API reference](/engram/api/rest) for the full list of endpoints, and the [guides](../engram-guides/store-memories.md) cover storing, searching, and managing memories.

## Claude Code plugin

The [`engram` plugin](https://github.com/weaviate/engram-plugins) gives [Claude Code](https://claude.com/claude-code) long-term memory backed by Engram. It recalls relevant memories before each answer and stores each completed turn — everything happens automatically via hooks, with no tools for the agent to call. Memory is best-effort and never blocks a session.

When creating your Engram project, you choose [topics](../engram-concepts/topics.md) that control what memories get extracted. Select the **Coding Assistant** template for topics tailored to coding sessions — you can also define custom topics for a more tailored experience.

Once the project is created, set your API key in your shell profile (e.g. `~/.zshrc` or `~/.bashrc`), then install the plugin inside a Claude Code session:

```bash
export ENGRAM_API_KEY=...
```

```bash
/plugin marketplace add weaviate/engram-plugins
/plugin install engram@weaviate-engram
```

That's it — memory starts working on your next prompt. See the [plugin README](https://github.com/weaviate/engram-plugins) for more info and optional customization.

## Hermes Agent

[`hermes-weaviate-engram`](https://github.com/weaviate/hermes-weaviate-engram) is a memory provider plugin that gives the [Hermes Agent](https://github.com/NousResearch/hermes-agent) long-term memory backed by Engram. It recalls relevant memories into the system prompt before each turn, and stores each completed turn through Engram's pipeline.

Install the plugin and run the setup wizard, which prompts for your API key:

```bash
pip install hermes-weaviate-engram
hermes memory setup        # choose weaviate_engram
```

The wizard saves `ENGRAM_API_KEY` to `~/.hermes/.env` and sets `memory.provider` in your Hermes config.

The plugin exposes three tools to the agent:

| Tool            | Description                                                                                                                                   |
| --------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| `engram_search` | Search memories by semantic similarity.                                                                                                       |
| `engram_store`  | Store a memory. This is also how the agent "forgets" — it stores a correcting memory, and Engram's reconcile pipeline supersedes the old one. |
| `engram_fetch`  | Profile-shaped recall, such as "what do you know about me?"                                                                                   |

Optional settings live in `~/.hermes/weaviate_engram.json` (for example `auto_recall`, `auto_capture`, and `max_recall_results`). Set `ENGRAM_BASE_URL` to point at a staging or self-hosted endpoint. See the [plugin README](https://github.com/weaviate/hermes-weaviate-engram) for the full configuration reference.

## 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`.
