> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs-beta.getzep.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs-beta.getzep.com/_mcp/server.

# User summary

## Overview

The **user summary** is a derived narrative that describes the user across conversations. Zep creates the summary from facts and entities in the user's Context Graph.

Zep stores the summary on the user's central entity node.

The user summary only exists on user graphs. Context Graphs addressed with `graph_id` do not have user nodes or user summaries.

The summary describes the user from information across the graph. It does not describe only one conversation.

## User summary in the Context Block

The default [Context Block](/retrieving-context) includes the user summary when both of these conditions are true:

* The account has user summaries enabled.
* The user node has a summary.

The query does not filter the user summary. The other context types appear when Smart Context Assembly selects them.

In the Context Block, the user summary is rendered first, wrapped in `<USER_SUMMARY>` tags:

```text
# This is the user summary
<USER_SUMMARY>
Emily Painter is a user with account ID Emily0e62 who uses digital art tools for creative work...
</USER_SUMMARY>
```

## Retrieval

The user summary lives on the user's central entity node. Fetch the node and read its `summary` field.

**`Python`**

```python Python
from zep_cloud.client import Zep

client = Zep(api_key=API_KEY)

response = client.user.get_node(user_id="emily-painter")

if response.node:
    print(response.node.summary)
```

**`TypeScript`**

```typescript TypeScript
import { ZepClient } from "@getzep/zep-cloud";

const client = new ZepClient({ apiKey: API_KEY });

const response = await client.user.getNode("emily-painter");

if (response.node) {
    console.log(response.node.summary);
}
```

**`Go`**

```go Go
import (
    "context"
    "fmt"
    v3client "github.com/getzep/zep-go/v3/client"
    "github.com/getzep/zep-go/v3/option"
)

client := v3client.NewClient(option.WithAPIKey(API_KEY))

response, err := client.User.GetNode(context.TODO(), "emily-painter", nil)
if err != nil {
    // handle error
}

if response.Node != nil {
    fmt.Println(response.Node.Summary)
}
```

When available, `thread.get_user_context()` includes the summary in the `<USER_SUMMARY>` section. Use `get_node` to retrieve the summary directly.

The [custom Context Block example](/advanced-context-block-construction#example-4-using-user-summary-in-context-block) shows how to use the summary separately.

## Generation

Zep generates and maintains the user summary. You cannot write to it directly.

Zep updates the summary when the user's graph receives new data. This includes episodes, fact triples from `graph.add_fact_triple`, and nodes from `graph.add_nodes`. The update runs asynchronously after the data is written, so the summary can lag the graph for a short time.

## Customization

Use [user summary instructions](/user-summary-instructions) to specify what the summary emphasizes. You can configure instructions for a user or for a project.