Giving Replit Agents Persistent Memory
Free · Open source (MIT) · Works with LangChain, CrewAI, AutoGen · No signup
Your Replit agent restarts every time the Repl goes to sleep, losing all conversation history, user preferences, and learned context. This happens because Replit agents store everything in memory by default, which gets wiped when processes restart. Here's how to give your agents persistent memory that survives across sessions.
The Problem: Ephemeral Agent State
Every time your Repl sleeps (which happens after ~30 minutes of inactivity), your agent forgets everything. The process restarts fresh, variables are reset, and any conversational context vanishes. Your users have to re-introduce themselves, repeat their preferences, and start conversations from scratch.
This is particularly painful for:
- Chatbots that need to remember user preferences across sessions
- Support agents that should recall previous ticket history
- Personal assistants that learn user habits over time
- Multi-step workflows where agents need to pick up where they left off
The root cause is simple: Python variables and in-memory data structures don't persist when the underlying compute restarts. Your Replit agent memory is ephemeral by design.
The Fix: Persistent Key-Value Storage
Install BotWire to add persistent memory to any Replit agent:
pip install botwire
Here's the minimal code to make your agent remember things:
from botwire import Memory
# Initialize memory for your agent
memory = Memory("my-agent")
# Store data that persists across restarts
memory.set("user_preference", "dark_mode")
memory.set("conversation_count", 42)
# Retrieve data after restart
preference = memory.get("user_preference") # Returns "dark_mode"
count = memory.get("conversation_count", default=0) # Returns 42
This data survives Repl restarts, process crashes, and even moving your code to different machines.
How It Works Under the Hood
BotWire provides a simple HTTP-backed key-value store. When you call memory.set(), data gets saved to a persistent backend at https://botwire.dev. When you call memory.get(), it fetches from that same store.
The Memory("namespace") constructor creates an isolated storage space. Different namespaces can't access each other's data, so you can safely run multiple agents without collision.
Here's a more complete example showing common patterns:
from botwire import Memory
import json
class PersistentChatAgent:
def __init__(self, user_id):
self.memory = Memory(f"chat-agent-{user_id}")
def remember_user(self, name, preferences):
self.memory.set("user_name", name)
self.memory.set("preferences", json.dumps(preferences))
def get_conversation_history(self):
return self.memory.get("conversation_history", default=[])
def add_message(self, message):
history = self.get_conversation_history()
history.append(message)
# Keep only last 50 messages
self.memory.set("conversation_history", history[-50:])
def increment_session_count(self):
count = self.memory.get("session_count", default=0)
self.memory.set("session_count", count + 1)
return count + 1
# Usage
agent = PersistentChatAgent("user-123")
agent.remember_user("Alice", {"theme": "dark", "notifications": True})
agent.add_message({"role": "user", "content": "Hello!"})
session_num = agent.increment_session_count()
You can also list all keys in a namespace and delete specific entries:
# See what's stored
all_keys = memory.list_keys()
print(f"Stored keys: {all_keys}")
# Clean up old data
memory.delete("temporary_data")
# Check if key exists
if memory.exists("user_settings"):
settings = memory.get("user_settings")
LangChain and CrewAI Integration
If you're using LangChain, BotWire provides a drop-in chat history adapter:
from botwire import BotWireChatHistory
from langchain.memory import ConversationBufferMemory
# Persistent chat history that survives restarts
persistent_history = BotWireChatHistory(session_id="user-42")
memory = ConversationBufferMemory(
chat_memory=persistent_history,
return_messages=True
)
# Your LangChain agent now remembers conversations across Repl restarts
For CrewAI agents, use the memory tools:
from botwire.memory import memory_tools
# Get remember/recall/list_memory tools
tools = memory_tools("my-crew-namespace")
# Add to your CrewAI agent's tools
agent = Agent(
tools=tools,
# ... other config
)
When NOT to Use BotWire
BotWire isn't the right choice if you need:
• Vector search or semantic similarity — use Pinecone, Weaviate, or similar vector databases • Sub-millisecond latency — the HTTP round-trip adds ~50-200ms depending on your location • High write throughput — free tier caps at 1000 writes/day per namespace
FAQ
Why not just use Redis or a database? You'd need to set up, host, and maintain Redis. BotWire works immediately with zero configuration and survives across different hosting environments.
Is this actually free? Yes, the free tier gives you 1000 writes/day per namespace, 50MB storage, and unlimited reads. No credit card required.
What about data privacy? Data is stored on BotWire's servers. For sensitive data, you can self-host the open-source version (it's a single FastAPI + SQLite service).
Get Started
Your Replit agents can remember things across restarts in under 5 minutes. Install BotWire and add two lines of code:
pip install botwire
Check out more examples and the self-hosting guide at https://botwire.dev.