Skip to main content
Glama
moltizmo
by moltizmo
README.md
# Smriti

**Local-first persistent memory for AI agents via MCP.**

*Smriti (स्मृति) — Sanskrit for "memory, remembrance"*

One brain. Every agent. Zero cloud. Zero cost.

## What is this?

A standalone MCP server backed by **sqlite-vec** and a local embedding model. Install it, point any MCP-compatible agent at it, and every AI you use shares one persistent, semantically searchable memory.

| | Smriti | Cloud alternatives |
|---|---|---|
| **Setup** | `npx smriti` | Accounts + API keys + config |
| **Cost** | $0 | Variable |
| **Privacy** | 100% local | Data on external servers |
| **Offline** | Full functionality | Needs internet |
| **Portability** | Single `.db` file | DB export/migration |

## Install

```bash
npm install -g smriti
```

## Usage

```bash
# MCP server — stdio mode (for Claude Code, Cursor, etc.)
smriti

# MCP server — HTTP mode (for remote agents)
smriti --http --port 3838
```

## CLI Quick Reference

```bash
# Capture a memory
smriti capture "We chose PostgreSQL over MySQL for the new service"

# Semantic search
smriti search "database decisions"

# Browse recent memories (last 7 days)
smriti recall --days 7

# Browse by topic
smriti recall "authentication"

# Batch-extract memories from a conversation or document
smriti ingest --text "Long meeting notes or conversation log..." --threshold 0.4

# Memory stats
smriti stats

# Sync to GitHub (requires: smriti auth)
smriti sync

# GitHub auth
smriti auth
smriti whoami
smriti logout
```

## MCP Client Configuration

### Claude Code

Add to `~/.claude/mcp.json`:

```json
{
  "mcpServers": {
    "memory": {
      "command": "smriti"
    }
  }
}
```

### Cursor

Add to MCP settings:

```json
{
  "mcpServers": {
    "memory": {
      "command": "npx",
      "args": ["smriti"]
    }
  }
}
```

### Any MCP client (HTTP mode)

```bash
smriti --http --port 3838
```

Then point your client at `http://localhost:3838/mcp`.

## Tools

| Tool | Description |
|------|-------------|
| `capture` | Store a thought with auto-extracted metadata |
| `search` | Semantic search — find thoughts by meaning |
| `recall` | Browse recent memories with filters |
| `forget` | Delete a specific memory by ID |
| `context` | Get structured context bundle for a topic |
| `stats` | Memory patterns and insights |

## Resources

| URI | Description |
|-----|-------------|
| `memory://recent` | Last 24h of thoughts |
| `memory://topics` | Topic index with counts |
| `memory://people` | People mentioned + context |
| `memory://stats` | Overall memory statistics |

## Prompts

| Name | Description |
|------|-------------|
| `brain-dump` | Guided capture session |
| `weekly-review` | End-of-week synthesis |
| `migrate` | Import memories from other sources |

## Configuration

Config lives at `~/.smriti/config.json`:

```json
{
  "db_path": "~/.smriti/brain.db",
  "embedding": {
    "provider": "onnx",
    "model": "Xenova/all-MiniLM-L6-v2"
  },
  "extraction": {
    "provider": "rules"
  },
  "server": {
    "transport": "stdio",
    "port": 3838
  }
}
```

## How it works

1. You (or an agent) call `capture` with text
2. Smriti generates a vector embedding locally (all-MiniLM-L6-v2 via ONNX)
3. Regex-based extraction pulls out people, topics, actions, and classifies the type
4. Everything is stored in a single SQLite file with sqlite-vec for vector search
5. `search` finds thoughts by semantic similarity, not just keywords
6. All data stays on your machine — nothing leaves localhost

## License

MIT