base on Letta is the platform for building stateful agents: open AI with advanced memory that can learn and self-improve over time. <p align="center"> <picture> <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/letta-ai/letta/refs/heads/main/assets/Letta-logo-RGB_GreyonTransparent_cropped_small.png"> <source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/letta-ai/letta/refs/heads/main/assets/Letta-logo-RGB_OffBlackonTransparent_cropped_small.png"> <img alt="Letta logo" src="https://raw.githubusercontent.com/letta-ai/letta/refs/heads/main/assets/Letta-logo-RGB_GreyonOffBlack_cropped_small.png" width="500"> </picture> </p> # Letta (formerly MemGPT) Letta is the platform for building stateful agents: open AI with advanced memory that can learn and self-improve over time. * [**Quickstart**](https://docs.letta.com/quickstart): Build your first stateful agent in 5 minutes using Python or TypeScript * [**Understanding agent memory**](https://docs.letta.com/core-concepts): Learn about memory blocks, tools, and how Letta agents maintain state * [**Examples and tutorials**](https://docs.letta.com/tutorials/): Working code examples for common use cases and agent patterns * [**API reference**](https://docs.letta.com/api): Complete REST API and SDK documentation for Python and TypeScript > [!TIP] > **Letta Code** is a memory-first coding harness, built on top of the Letta API. Instead of working in independent sessions, you work with a persisted agent that learns over time and is portable across models. You can use Letta Code to interact with any Letta agent via the CLI. > > Read more about how to use Letta Code on the [official docs page](https://docs.letta.com/letta-code), or on the [GitHub repo](https://github.com/letta-ai/letta-code). ## Get started with the Letta API Use the Letta API to build stateful agents that remember, learn, and improve over time. Letta allows you to build agents on any model provider, including OpenAI, Anthropic, Google Gemini, and more. ### Installation TypeScript / Node.js: ```bash npm install @letta-ai/letta-client ``` Python: ```bash pip install letta-client ``` ### Hello World example Below is a quick example of creating a stateful agent and sending it a message. See the full [quickstart guide](https://docs.letta.com/quickstart) for complete documentation. Running the examples require a [Letta Developer Platform](https://app.letta.com) account, or a [self-hosted Letta server](https://docs.letta.com/guides/selfhosting/). TypeScript: ```typescript import Letta from "@letta-ai/letta-client"; const client = new Letta({ apiKey: process.env.LETTA_API_KEY }); // Create your agent const agentState = await client.agents.create({ model: "openai/gpt-4.1", embedding: "openai/text-embedding-3-small", memory_blocks: [ { label: "human", value: "Name: Timber. Status: dog. Occupation: building Letta, infrastructure to democratize self-improving superintelligence", }, { label: "persona", value: "I am a self-improving superintelligence. Timber is my best friend and collaborator.", }, ], tools: ["web_search", "run_code"], }); console.log("Agent created with ID:", agentState.id); // Send your agent a message const response = await client.agents.messages.create(agentState.id, { input: "What do you know about me?", }); for (const message of response.messages) { console.log(message); } ``` Python: ```python from letta_client import Letta import os client = Letta(api_key=os.getenv("LETTA_API_KEY")) # Create your agent agent_state = client.agents.create( model="openai/gpt-4.1", embedding="openai/text-embedding-3-small", memory_blocks=[ { "label": "human", "value": "Name: Timber. Status: dog. Occupation: building Letta, infrastructure to democratize self-improving superintelligence" }, { "label": "persona", "value": "I am a self-improving superintelligence. Timber is my best friend and collaborator." } ], tools=["web_search", "run_code"] ) print(f"Agent created with ID: {agent_state.id}") # Send your agent a message response = client.agents.messages.create( agent_id=agent_state.id, input="What do you know about me?" ) for message in response.messages: print(message) ``` ## Contributing Letta is an open source project built by over a hundred contributors from around the world. There are many ways to get involved in the Letta OSS project! * [**Join the Discord**](https://discord.gg/letta): Chat with the Letta devs and other AI developers. * [**Chat on our forum**](https://forum.letta.com/): If you're not into Discord, check out our developer forum. * **Follow our socials**: [Twitter/X](https://twitter.com/Letta_AI), [LinkedIn](https://www.linkedin.com/in/letta), [YouTube](https://www.youtube.com/@letta-ai) --- ***Legal notices**: By using Letta and related Letta services (such as the Letta endpoint or hosted service), you are agreeing to our [privacy policy](https://www.letta.com/privacy-policy) and [terms of service](https://www.letta.com/terms-of-service).* ", Assign "at most 3 tags" to the expected json: {"id":"3612","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"