Every use case below is a frustration you have already felt. See the before, the after, the code, and the API response.
// Conversation 1 -- user states a preference
await rem.remember({
content: "User prefers metric units, dark mode, concise answers",
namespace: "user_8291"
})
// Conversation 2 -- bot recalls without asking
const prefs = await rem.recall({
query: "user preferences",
namespace: "user_8291"
})
{
"memories": [
{
"content": "User prefers metric units, dark mode, concise answers",
"score": 0.96,
"created_at": "2026-03-15T14:22:00Z",
"namespace": "user_8291"
}
],
"latency_ms": 23
}
# Import your entire ChatGPT history
rem import chatgpt conversations.json
# => "Indexed 3,041 conversations. Found 847 preferences,
# 234 decisions, 91 people mentioned."
# Now ask it anything
rem recall "what did I decide about the database?"
{
"memories": [
{
"content": "Decided on Postgres over MongoDB for the main DB. Reasons: better JSON support than expected, ACID compliance, team familiarity.",
"score": 0.93,
"source": "chatgpt_conv_1847",
"created_at": "2026-03-12T09:15:00Z"
}
],
"latency_ms": 31
}
from remlabs import REM
rem = REM(api_key="your-key", namespace="research-agent")
# End of run -- persist what was learned
rem.remember(
content="Paper A contradicts Paper B on dosage efficacy. Paper C (2024) confirms A with n=2000 sample."
)
# Next run -- pick up where you left off
context = rem.recall(query="what do we know about dosage?")
{
"memories": [
{
"content": "Paper A contradicts Paper B on dosage efficacy. Paper C (2024) confirms A with n=2000 sample.",
"score": 0.97,
"created_at": "2026-04-10T16:30:00Z"
},
{
"content": "Meta-analysis by Chen et al. found dose-response curve flattens above 200mg. Aligns with Paper A findings.",
"score": 0.91,
"created_at": "2026-04-09T11:45:00Z"
}
],
"latency_ms": 18
}
// Rep A resolves a ticket
await rem.remember({
content: "Billing error 4012: caused by timezone mismatch in payment processor. Fix: update locale in Settings > Billing > Region.",
namespace: "support-team"
})
// Rep B gets the same question next week
const fix = await rem.recall({
query: "billing error 4012",
namespace: "support-team"
})
{
"memories": [
{
"content": "Billing error 4012: caused by timezone mismatch in payment processor. Fix: update locale in Settings > Billing > Region.",
"score": 0.98,
"namespace": "support-team",
"created_at": "2026-04-01T10:00:00Z"
}
],
"latency_ms": 14
}
// Six months ago
await rem.remember({ content: "User lives in Seattle", namespace: "user_42" })
// Last week -- contradicts the old fact
await rem.remember({ content: "User just moved to Portland", namespace: "user_42" })
// REM resolves the conflict automatically
const result = await rem.recall({
query: "where does user live?",
namespace: "user_42"
})
{
"memories": [
{
"content": "User just moved to Portland",
"score": 0.95,
"created_at": "2026-04-05T08:00:00Z",
"supersedes": "User lives in Seattle"
}
],
"temporal_resolution": true,
"latency_ms": 22
}
# Sync your vault into REM
rem import obsidian ~/Documents/vault
# => "Indexed 2,041 notes. 847 wikilinks mapped."
# Ask across your entire body of notes
rem recall "what are my notes on pricing strategy?"
{
"memories": [
{
"content": "Pricing strategy: value-based preferred over cost-plus. Key insight from SaaS pricing research -- anchor on outcomes not features.",
"score": 0.94,
"source": "obsidian://Pricing Strategy.md",
"linked_notes": ["SaaS Metrics", "Revenue Model", "Competitor Pricing"]
}
],
"total_sources": 12,
"latency_ms": 27
}
rem.recall("user address") always returns the latest. Old versions are kept in history but never surface as current truth.
// January: user sets their address
await rem.remember({
content: "Shipping address: 123 Pine St, Seattle, WA 98101",
namespace: "user_42"
})
// March: user moves
await rem.remember({
content: "New shipping address: 456 Oak Ave, Portland, OR 97201",
namespace: "user_42"
})
// Any time after: always returns the latest
const addr = await rem.recall({
query: "user shipping address",
namespace: "user_42"
})
{
"memories": [
{
"content": "New shipping address: 456 Oak Ave, Portland, OR 97201",
"score": 0.97,
"created_at": "2026-03-15T12:00:00Z",
"supersedes": "123 Pine St, Seattle, WA 98101",
"temporal_resolution": true
}
],
"latency_ms": 19
}
Give your AI agent memory that persists. Import ChatGPT history, connect any tool, and let your memory API for chatbots work across platforms.