The simplest way to get started with Remind. SQLite is the default backend — no database server required.
- Python 3.11+
- Remind installed:
pip install remind-mcpCopy the example config to either the global or project-local location:
# Global (applies to all projects)
mkdir -p ~/.remind
cp remind.config.json.example ~/.remind/remind.config.json
# Project-local (only this directory, takes precedence over global)
mkdir -p .remind
cp remind.config.json.example .remind/remind.config.jsonEdit the file and fill in your API keys.
By default, Remind stores data in <current-directory>/.remind/remind.db (project-aware mode) when you run from a project directory, or ~/.remind/memory.db for a global shared database.
# Store a memory
remind remember "First memory stored in SQLite"
# Recall memories
remind recall "memory"
# Check stats
remind stats
# Run consolidation
remind consolidatesqlite3 .remind/remind.dbSELECT COUNT(*) FROM episodes;
SELECT id, title FROM concepts;
.tables -- list all tables
.quitDefault (project-aware) — stores data alongside your project:
remind remember "something"
# → .remind/remind.db in current directoryNamed database — stores in ~/.remind/<name>.db:
remind --db myproject remember "something"Explicit path or URL — full control:
remind --db /path/to/my.db remember "something"
remind --db "sqlite:////path/to/my.db" remember "something"Environment variable (recommended for shared scripts):
export REMIND_DB_URL="sqlite:////path/to/my.db"
remind remember "something"Config file (~/.remind/remind.config.json):
{
"db_url": "sqlite:////path/to/my.db"
}sqlite:////absolute/path/to/file.db
sqlite:///relative/path/to/file.db
SQLite requires four slashes (////) for absolute paths and three (///) for relative paths. See the SQLAlchemy docs for details.
Remind can store embedding vectors in sqlite-vec vec0 tables for fast KNN search. The sqlite-vec Python package is installed with remind-mcp, but the extension only activates if your Python was built so that sqlite3.Connection supports enable_load_extension (i.e. SQLite was compiled with loadable extensions, and Python was configured accordingly). On some macOS and pyenv setups this is off by default.
Quick check:
python -c "import sqlite3; c=sqlite3.connect(':memory:'); print('sqlite-vec usable:', hasattr(c, 'enable_load_extension'))"If that prints False, Remind still runs and recalls correctly using in-Python cosine similarity; only the native index path is skipped. To enable sqlite-vec, reinstall Python linked against Homebrew SQLite with --enable-loadable-sqlite-extensions (see Configuration — Vector search on the docs site).
SQLite is great for single-user and local development use cases. Consider switching to PostgreSQL when you need:
- Multiple processes or machines writing concurrently
- A shared team database
- Better performance at very large scale
See the postgres-docker example to get started with PostgreSQL.