Loading…
long-term memory
for AI agents.
Save what your agent learns, find it with no model in the loop, and let newer facts supersede older ones. One API, an MCP server, a CLI and a TypeScript SDK.
npm install @recall-ai/sdk
pnpm add @recall-ai/sdk
yarn add @recall-ai/sdk
bun add @recall-ai/sdk
Works with
Features
Your coding agent saves what it learns once. Recall keeps the source, the facts in it, and a summary of the project, for every tool you code in.
Notes
Tell Claude Code “we switched from npm to pnpm” and that note supersedes the old one. Open Cursor the next day and it installs with pnpm. The npm note stays as history, never as an answer.
Files and pieces
Save a README or bring in a GitHub repo. Each file is split into pieces, and every piece remembers its file, so Codex can show where an answer came from.
About
Core facts plus changing facts for each repository. Claude Code and OpenCode get them when a session starts, so your agent knows the project before you explain it.
How it works
Saving and finding take no AI, so your agent never waits. AI runs only during Sync, in the background, to keep what Recall knows current.
Save
Your text is split into pieces, embedded and findable within seconds. Facts become notes by rules, with no model call.
Sync
In the background, per realm, a language model asks one question about each new note: new, superseding an older one, or a repeat. Capped by monthly sync credits.
Find
Find combines Postgres full-text and vector search over notes and pieces. No model call, so it stays fast and cheap.
Quickstart
Create a key in the console, then save and find. A realm is created the first time you save to it. That's the integration.
import { Recall } from "@recall-ai/sdk";
const recall = new Recall({ apiKey: process.env.RECALL_API_KEY!, baseUrl: "https://<your-host>" });
await recall.save("user_42", "I moved to Toronto last month and I prefer Python.");
const { results } = await recall.find("user_42", "where does the user live?");# save
curl -X POST https://<your-host>/v1/realms/user_42/file \
-H "Authorization: Bearer $RECALL_API_KEY" -H "Content-Type: application/json" \
-d '{"content": "I moved to Toronto last month and I prefer Python."}'
# recall
curl -X POST https://<your-host>/v1/realms/user_42/find \
-H "Authorization: Bearer $RECALL_API_KEY" -H "Content-Type: application/json" \
-d '{"q": "where does the user live?", "limit": 5}'import os, httpx
recall = httpx.Client(base_url="https://<your-host>",
headers={"Authorization": f"Bearer {os.environ['RECALL_API_KEY']}"})
recall.post("/v1/realms/user_42/file",
json={"content": "I moved to Toronto last month and I prefer Python."})
hits = recall.post("/v1/realms/user_42/find", json={"q": "where does the user live?"}).json()CLI
Save, find and remove notes from your terminal or a script. Sign in once with recall login; every other command is refused until you do. Inside a project it uses the same realm as your coding agents. Add --realm <name> to pick another one, or --json for scripts.
npm install -g @recall-ai/cli recall login # opens your browser recall status # account, realm and usage recall connect my-project # link this folder to a realm
recall save "We deploy with Vercel." recall find "how do we deploy?" recall about # core and changing facts recall remove "old notes" # asks before removing recall files # or: recall files <id> recall files rm <id> # delete a file recall sync # run Sync now recall realms # all your realms
recall setup claude # or cursor, codex, opencode recall mcp # MCP server over stdio recall explore # the realm as files recall explore RECALL.md # print one file
Plugins
One memory for every tool you code in. Claude Code, OpenCode, Cursor and Codex all use the realm project-<repo folder>, so a decision made in one is remembered in the others. Each adds the MCP tools recall_save and recall_find; Claude Code and OpenCode also bring in and save notes on their own. Sign in once with npx @recall-ai/cli login. Source
# 1. sign in once (opens your browser) npx @recall-ai/cli login # 2. in Claude Code: recalls the project at session start and with each prompt, # keeps learning as the conversation grows, adds the Recall tools /plugin marketplace add Ravicodess/Recall-AI /plugin install recall@recall-ai
# 1. sign in once (opens your browser) npx @recall-ai/cli login # 2. add the Recall tools to ~/.cursor/mcp.json npx @recall-ai/cli setup cursor # 3. the rule that tells the agent when to find and save mkdir -p .cursor/rules && curl -fsSL https://raw.githubusercontent.com/Ravicodess/Recall-AI/main/plugins/cursor/recall.mdc -o .cursor/rules/recall.mdc
# 1. sign in once (opens your browser) npx @recall-ai/cli login # 2. add the Recall tools to ~/.codex/config.toml npx @recall-ai/cli setup codex # 3. the rule that tells the agent when to find and save curl -fsSL https://raw.githubusercontent.com/Ravicodess/Recall-AI/main/plugins/codex/AGENTS.md >> AGENTS.md
# 1. sign in once (opens your browser) npx @recall-ai/cli login # 2. add the Recall tools to ~/.config/opencode/opencode.json npx @recall-ai/cli setup opencode # 3. bring in and save notes automatically in this project mkdir -p .opencode/plugin && curl -fsSL https://raw.githubusercontent.com/Ravicodess/Recall-AI/main/plugins/opencode/index.js -o .opencode/plugin/recall.js
# signed in with `npx @recall-ai/cli login`: the CLI runs the MCP server for you
{
"mcpServers": {
"recall": { "command": "npx", "args": ["-y", "@recall-ai/cli", "mcp"] }
}
}
# or over HTTP, with a key from API keys
{
"mcpServers": {
"recall": { "type": "http", "url": "https://<your-host>/mcp", "headers": { "Authorization": "Bearer rc_your_key" } }
}
}# save pages and selections, find from the toolbar 1. Download plugins/browser from https://github.com/Ravicodess/Recall-AI/tree/main/plugins 2. chrome://extensions → Developer mode → Load unpacked 3. Open the extension settings and paste a key from API keys Save a page: toolbar button, right-click, or Alt+Shift+S
Benchmark
Measured by us, on our own published eval set. No borrowed numbers.
| Check | Result |
|---|---|
| Exact recall@5 on our 50-case eval | 90% |
| Supersede accuracy, background step on | 10/10 |
| Cross-tenant leaks, every endpoint tested | 0 |
| Restore drill: same answers after restore | 100/100 |
| Language-model calls when you Find | 0 |
Pricing
Start free. Limits are per calendar month. Paid plans open soon.
- 250K API requests
- 25K files
- 2M pieces
- 125K finds
- 2.5M sync credits
- 2M API requests
- 250K files
- 20M pieces
- 1M finds
- 25M sync credits
- 100M API requests
- 100M files
- 1B pieces
- 100M finds
- 1B sync credits
Frequently Asked Questions
Short answers.
Does Find call a language model?
No. Find is Postgres full-text plus vector search. A model only runs during Sync, in the background, to decide which notes supersede which.
What happens if the model is down?
Saving and finding keep working; Sync retries later. Until it runs, a new note and an old one can both appear as current.
Where is my data stored?
In Postgres with pgvector, on Supabase, in a single region. We don't train models on it. Sync sends new notes to our language-model provider to decide which ones supersede which.
Can I delete everything?
Yes. Delete files, and remove notes by id or by meaning, with a dry run first. Deleted content can no longer be found.
Can I self-host Recall?
No. Recall is a hosted service, so you never run a database or a queue.
Is there an SDK?
Yes, for TypeScript: npm install @recall-ai/sdk. Any other language can use the plain JSON API.