Time-travel for your dev workflow. Recall is a local-first CLI that automatically records your development activity and lets you search it in plain English.
recall today
recall timeline
pip install dev-recall
recall init
source .zshrc # or .bashrcrecall 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)
| 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 |
🔒Privacy-first by design - Everything is stored locally
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
Add to ~/.zshrc (done automatically by recall init):
source ~/.config/dev-recall/hook.zshrecall init sets core.hooksPath globally — all future commits in any repo are captured.
Install the extension:
recall vscode installAutomatically 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/
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.
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
- 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*"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 retentionKey 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 }
}~/.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
git clone <repo>
cd dev-recall
pip install -e ".[dev]"
pytestrecall 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
- 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
MIT

