> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://docs-beta.getzep.com/v4/user-summary/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. A graph that you create with `graph.create` does not have a user node or a user summary. 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 `` tags: ```text # This is the user summary Emily Painter is a user with account ID Emily0e62 who uses digital art tools for creative work... ``` ## Retrieval The user summary lives on the user's central entity node. Fetch the node with the `uuid` that `user.create` returns, and read its `summary` field. **`Python`** ```python Python from zep_cloud.client import Zep client = Zep(api_key=API_KEY) # The uuid of the user, from your application database. node = client.user.get_node(zep_user_uuid) if node.summary: print(node.summary) ``` **`TypeScript`** ```typescript TypeScript import { ZepClient } from "@getzep/zep-cloud"; const client = new ZepClient({ apiKey: API_KEY }); // The UUID of the user, from your application database. const node = await client.user.getNode(zepUserUuid); if (node.summary) { console.log(node.summary); } ``` **`Go`** ```go Go import ( "context" "fmt" zepclient "github.com/getzep/zep-go/v4/client" "github.com/getzep/zep-go/v4/option" ) client := zepclient.NewClient(option.WithAPIKey(API_KEY)) // The UUID of the user, from your application database. node, err := client.User.GetNode(context.TODO(), zepUserUUID) if err != nil { // handle error } if node.Summary != nil { fmt.Println(*node.Summary) } ``` When available, `thread.get_context()` includes the summary in the `` 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, edges from `graph.edge.add`, and nodes from `graph.node.add`. 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. > A baseline description of the user