* chore: env permanent * chore: env permanent * feat: add persistent environments with hybrid DB + Redis storage [LET-7721] Implements persistent storage for letta-code listener connections (environments) with hybrid PostgreSQL + Redis architecture: **Database Layer:** - Add `environments` table with device tracking, connection metadata, soft deletes - Store userId/apiKeyOwner, connection history (firstSeenAt, lastSeenAt) - Unique constraint on (organizationId, deviceId) - one environment per device per org - Auto-undelete previously deleted environments on reconnect **API Layer:** - Update environmentsContract with new fields (id, firstSeenAt, lastSeenAt, metadata) - Add deleteEnvironment endpoint (soft delete, closes WebSocket if online) - Add onlineOnly filter to listConnections for efficient online-only queries - Export ListConnectionsResponse type for proper client typing **Router Implementation:** - register(): Create/update DB environment, generate ephemeral connectionId - listConnections(): Hybrid query strategy (DB-first for all, Redis-first for onlineOnly) - deleteEnvironment(): Soft delete with Redis Pub/Sub for graceful WebSocket close - Filter by connectionId in DB using inArray() for onlineOnly performance **WebSocket Handler:** - Moved from apps/cloud-api to libs/utils-server for reusability - Update DB on connect/disconnect only (not heartbeat) - minimal write load - Store currentPodId and userId/apiKeyOwner on connect - Clear currentConnectionId/currentPodId on disconnect/error **Shared Types:** - Add EnvironmentMetadata interface in libs/types for cross-layer consistency - Update Redis schema to include currentMode field **UI Components:** - Add DeleteDeviceModal with offline-only restriction - Update DeviceSelector with delete button on hover for offline devices - Proper cache updates using ListConnectionsResponse type - Add translations for delete modal 🐾 Generated with [Letta Code](https://letta.com) Co-Authored-By: Letta <noreply@letta.com> * docs: update letta remote setup instructions [LET-7721] Update local setup guide with clearer instructions: - Remove hardcoded ngrok URL requirement (ngrok generates URL automatically) - Update env var to use CLOUD_API_ENDPOINT_OVERRIDE - Add proper API key and base URL format - Include alternative setup using letta-code repo with bun dev 🐾 Generated with [Letta Code](https://letta.com) Co-Authored-By: Letta <noreply@letta.com> * chore: fix env * fix: lint errors and make migration idempotent [LET-7721] - Remove unused imports (HiddenOnMobile, VisibleOnMobile, MiddleTruncate) - Fix type imports (use `import type` for type-only imports) - Remove non-null assertions in environmentsRouter (use safe null checks + filter) - Make migration idempotent with IF NOT EXISTS for table, indexes, and constraints - Use DO $$ block for foreign key constraint (handles duplicate_object exception) 🐾 Generated with [Letta Code](https://letta.com) Co-Authored-By: Letta <noreply@letta.com> * chore: fix env --------- Co-authored-by: Letta <noreply@letta.com>
Letta (formerly MemGPT)
Letta is the platform for building stateful agents: AI with advanced memory that can learn and self-improve over time.
- Letta Code: run agents locally in your terminal
- Letta API: build agents into your applications
Get started in the CLI
Requires Node.js 18+
- Install the Letta Code CLI tool:
npm install -g @letta-ai/letta-code - Run
lettain your terminal to launch an agent with memory running on your local computer
When running the CLI tool, your agent help you code and do any task you can do on your computer.
Letta Code supports skills and subagents, and bundles pre-built skills/subagents for advanced memory and continual learning. Letta is fully model-agnostic, though we recommend Opus 4.5 and GPT-5.2 for best performance (see our model leaderboard for our rankings).
Get started with the Letta API
Use the Letta API to integrate stateful agents into your own applications. Letta has a full-featured agents API, and a Python and Typescript SDK (view our API reference).
Installation
TypeScript / Node.js:
npm install @letta-ai/letta-client
Python:
pip install letta-client
Hello World example
Below is a quick example of creating a stateful agent and sending it a message (requires a Letta API key). See the full quickstart guide for complete documentation.
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-5.2",
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", "fetch_webpage"],
});
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:
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-5.2",
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", "fetch_webpage"]
)
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: Chat with the Letta devs and other AI developers.
- Chat on our forum: If you're not into Discord, check out our developer forum.
- Follow our socials: Twitter/X, LinkedIn, YouTube
Legal notices: By using Letta and related Letta services (such as the Letta endpoint or hosted service), you are agreeing to our privacy policy and terms of service.
