Local-first developer memory layer
Project description
Recall
Local-first developer memory layer. Captures every developer activity — terminal commands, git commits, file edits, repo opens, AI chat sessions — into a structured SQLite database with a FAISS vector index. Enables natural language recall:
recall ask "what did I work on last Tuesday?"
recall ask "how did I fix the auth bug?"
recall today
recall timeline
Quick Start
pip install dev-recall
recall init
source .zshrc # or .bashrc
recall init will:
- Create
~/.local/share/recall/and~/.config/recall/ - Initialize the SQLite database + FAISS vector index
- Install the zsh/bash shell hook (appends
sourceline to your rc file) - Set
git config --global core.hooksPathto capture all commits - Start the background daemon (via systemd user service or subprocess)
Commands
| Command | Description |
|---|---|
recall init |
First-time setup |
recall ask "<query>" |
Natural language search with LLM answer |
recall today |
Summary of today's activity |
recall week |
Summary of this week's activity |
recall timeline |
Chronological event list for a day |
recall search "<query>" |
Raw hybrid search (no LLM) |
recall repos |
List all tracked repos |
recall stats |
Capture statistics |
recall export |
Export events as JSON or CSV |
recall config |
View/edit configuration |
recall privacy list |
Show what's captured |
recall privacy delete |
Delete captured events |
recall privacy ignore --cmd "pattern" |
Add a privacy filter |
recall daemon start/stop/status/logs |
Manage the background daemon |
recall mcp-serve |
Start MCP server (for Claude Code / Copilot) |
recall vscode install |
Build and install VS Code extension |
Architecture
Collectors (shell hook, git hooks, VS Code ext, AI log watcher)
↓ events (TSV files + HTTP POST)
Daemon (FileWatcher → Enricher → SessionDetector → DB insert → Embedder)
↓
Storage (SQLite events.db + FTS5, FAISS vectors.faiss)
↓
Query (Hybrid FAISS+FTS5 → RRF → LLM via OpenRouter)
↓
CLI + MCP Server
Data Sources
Shell commands (zsh / bash)
Add to ~/.zshrc (done automatically by recall init):
source ~/.config/dev-recall/hook.zsh
Git commits
recall init sets core.hooksPath globally — all future commits in any repo are captured.
VS Code activity
Install the extension:
recall vscode install
AI chat sessions
Automatically scanned from:
- GitHub Copilot Chat:
~/.config/Code/User/workspaceStorage/*/GitHub.copilot-chat/debug-logs/ - Claude Code:
~/.claude/projects/*/sessions/ - Aider:
.aider.chat.history.mdin git repos - Cursor:
~/.config/Cursor/User/workspaceStorage/
LLM Integration
Recall uses OpenRouter for the ask command and daily summaries.
export OPENROUTER_API_KEY=sk-or-...
recall ask "what was I debugging yesterday?"
Without an API key, recall ask falls back to --no-llm mode (shows retrieved events directly). All other commands work fully offline.
MCP Server
Use Recall as a context source in Claude Code or VS Code Copilot:
Claude Code (~/.config/claude/mcp.json):
{
"mcpServers": {
"dev-recall": {
"command": "dev-recall",
"args": ["mcp-serve"]
}
}
}
VS Code / Copilot (.vscode/mcp.json):
{
"servers": {
"dev-recall": {
"type": "stdio",
"command": "dev-recall",
"args": ["mcp-serve"]
}
}
}
Available MCP tools: recall, today_summary, recent_repos, find_command, timeline
Privacy
- Commands matching
*password*,*secret*,*token*etc. are dropped before storage - AI chat messages are truncated to 200 characters (intent only, not full content)
- File saves store only path + language, never file content
- All data is local only — LLM calls send only small event snippets, only when you run
ask - Default retention: 90 days (configurable)
recall privacy list # see what's captured
recall privacy delete --before 2026-01-01
recall privacy ignore --cmd "*mycompany*"
Configuration
Config file: ~/.config/dev-recall/config.json
recall config # show all settings
recall config daemon_port 8080 # change port
recall config retention_days 30 # shorter retention
Key settings:
{
"daemon_port": 27182,
"embedding_model": "all-MiniLM-L6-v2",
"llm_model": "anthropic/claude-sonnet-4",
"retention_days": 90,
"capture": { "terminal": true, "git": true, "vscode": true, "ai_chat": true }
}
Data Storage
~/.local/share/dev-recall/
├── events.db # SQLite (events + FTS5 + sessions + daily_summaries)
├── vectors.faiss # FAISS vector index
├── shell.tsv # shell hook ring buffer
├── git.tsv # git hook ring buffer
└── daemon.pid # running daemon PID
~/.config/dev-recall/
├── config.json
├── hook.zsh / hook.bash
└── git-hooks/post-commit + post-checkout
Development
git clone <repo>
cd dev-recall
pip install -e ".[dev]"
pytest
Sandbox testing
recall init makes system-wide changes (modifies ~/.zshrc, sets a global git config core.hooksPath, starts a background daemon). Use the provided Docker sandbox to test safely without touching your host environment.
Prerequisites: Docker
# Interactive shell — explore freely
./sandbox.sh
# Run the full test suite
./sandbox.sh test
# Run `recall init` and inspect every file it creates
./sandbox.sh init
# Run any arbitrary command
./sandbox.sh "recall --help"
What the sandbox isolates:
| Risk | Mitigation |
|---|---|
Modifies ~/.zshrc |
Only affects the container's home directory |
Sets global git config core.hooksPath |
Sandboxed git config, discarded on exit |
| Starts a background daemon | Killed automatically when the container exits |
| Network calls to OpenRouter | Blocked via --network none |
| Privilege escalation | --cap-drop ALL --security-opt no-new-privileges |
Alternatively, use a throwaway VM: multipass launch --name dev-recall-test
Roadmap
- v0.1 (current): Shell + git + daemon + CLI ask/today/timeline/stats
- v0.2: VS Code extension + AI chat parsers + week/repos/search/export + auto-summary
- v0.3: MCP server + privacy management + Aider/Cursor parsers
- v1.0: Cross-machine sync + web dashboard + Wakatime-compatible API
License
MIT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file dev_recall-0.2.3.tar.gz.
File metadata
- Download URL: dev_recall-0.2.3.tar.gz
- Upload date:
- Size: 69.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e5a918b8590c793e51efa7ed65eba822e132dd739448723848877d865cafd02c
|
|
| MD5 |
900deb6d93dfa1c6eb6d8dfb14fd99c4
|
|
| BLAKE2b-256 |
fc51c9ce61c53d7565b72f1bfc3ae37527fc345450adb863b26be6d916d36dbd
|
File details
Details for the file dev_recall-0.2.3-py3-none-any.whl.
File metadata
- Download URL: dev_recall-0.2.3-py3-none-any.whl
- Upload date:
- Size: 75.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1e06d304857d52063aa5b288609d7b55c9d697df12398e2472f1c272b98db794
|
|
| MD5 |
8092329e13a8d2d2a8480f11b0fba781
|
|
| BLAKE2b-256 |
e165b292595c36edbdb44322767e854a41d9a4259394f1439d035b6746392807
|