A self-contained Windows CLI that lets you chat with your personal corpus of files using natural language. All data stays on your machine — no cloud calls during operation.
╔══════════════════════════════════════════════╗
║ recall — your personal memory ║
║ KB: 42 files · 1 204 chunks ║
║ Type /help for commands ║
╚══════════════════════════════════════════════╝
| Requirement | Minimum |
|---|---|
| Windows | 10 x64 or later |
| Ollama | Latest stable |
| Everything | 1.4+ (optional — improves search speed) |
.NET 8is bundled — a separate runtime install is not required.
recall uses two extraction methods, applied in order. Only plain text is extracted — no images or embedded media are processed.
These formats are ZIP-based archives and are extracted using .NET's built-in compression library. No extra software required.
| Extension | Format |
|---|---|
.docx |
Microsoft Word (2007 and later) |
.xlsx |
Microsoft Excel (2007 and later) |
.pptx |
Microsoft PowerPoint (2007 and later) |
.txt .md .csv .log |
Plain text variants |
IFilter is a Windows COM interface that extracts text from arbitrary file types. It works when the corresponding IFilter handler is installed and registered on your machine. The handler is usually installed alongside the application that owns the format.
| Extension | Format | Typical handler |
|---|---|---|
.pdf |
Adobe PDF | Adobe Acrobat / Windows PDF viewer |
.msg |
Outlook email | Microsoft Office |
.doc .xls .ppt |
Legacy Office (pre-2007 binary) | Microsoft Office |
.eml |
Email (MIME) | Windows Search built-in |
.html .htm |
HTML | Windows Search built-in |
.rtf |
Rich Text Format | Windows Search built-in |
| Any other extension | — | Whatever IFilter is registered for that type |
OneDrive users: IFilter opens the file at the OS level, which can trigger a network sync for cloud-only files. recall handles this gracefully — if IFilter doesn't respond within 15 seconds the file is skipped with a log message. Ensure files are locally available for best results.
Click-to-Run Office: The Office IFilter shipped with Click-to-Run installations may not respond to out-of-process COM calls. In that case recall automatically falls back to the Open XML extractor for
.docx,.xlsx, and.pptxfiles.
.doc,.xls,.ppt(legacy binary Office) when no IFilter is installed.pdfwhen no PDF IFilter is installed (e.g. no Acrobat or Windows PDF handler)- Binary files: images, audio, video, executables, archives
- Password-protected documents
Both DLLs are bundled in the release zip inside the libs\ folder — you do not need to download them separately.
| DLL | Purpose |
|---|---|
libs\vec0.dll |
Vector similarity search — sqlite-vec |
libs\Everything64.dll |
Fast file discovery — Everything SDK |
Everything64.dllrequires the Everything application to be installed and running. Without it, recall falls back to Windows Desktop Search (WDS), which is always available on Windows 10/11 but may not index every folder.
| Software | URL | Notes |
|---|---|---|
| Ollama | https://ollama.com/download/windows | Required. Runs all LLMs locally. |
| nomic-embed-text | https://ollama.com/library/nomic-embed-text | Required. Embedding model (ollama pull nomic-embed-text). |
| qwen3:14b | https://ollama.com/library/qwen3 | Default chat model (ollama pull qwen3:14b). |
| Everything | https://www.voidtools.com | Optional. Enables faster file discovery than WDS. |
| sqlite-vec | https://github.com/asg017/sqlite-vec/releases | Bundled. Source of vec0.dll. |
| Everything SDK | https://www.voidtools.com/downloads/ | Bundled. Source of Everything64.dll. |
The installer (
install.ps1) handles Ollama and model pulls automatically. The DLLs are pre-bundled — no manual downloads required.
# Run once from the recall directory
.\install.ps1The installer will:
- Check for Ollama and download it if missing
- Pull the embedding model (
nomic-embed-text) - Pull the default chat model (
qwen3:14b— seeappsettings.json) - Verify the bundled
libs\vec0.dllis present - Copy files to
%APPDATA%\recall\(includinglibs\) and add it to your PATH
recallOn first launch recall will:
- Create
%APPDATA%\recall\recall.dbautomatically - Check that Ollama is running and both models are available
- Show the startup banner with an empty KB (0 files, 0 chunks)
- Prompt you to run
/setupif no search paths are configured
Configure which folders to search:
recall> /setup
Then ingest your first files:
recall> /ingest quarterly report
recall will search for matching files, show you the candidates, and ask whether to ingest them.
| Command | Description |
|---|---|
/setup |
Configure which folders recall searches |
/help |
Show command list |
/search <query> |
Search for files without ingesting |
/ingest <query> |
Find files and add new/stale ones to the KB |
/kb |
Show KB stats (files, chunks, last updated) |
/clear |
Clear the current conversation context |
/forget <path> |
Remove a file and its chunks from the KB |
/truncate |
Delete all files and chunks from the KB (prompts for confirmation) |
/exit or /quit |
Exit recall |
| anything else | Chat query against your knowledge base |
| Colour | Meaning |
|---|---|
| Green | File is already in the knowledge base and up to date |
| Yellow | File is in the KB but has been modified — will be re-ingested |
| Dim | File has not been ingested yet |
- All embeddings and chat inference run locally via Ollama
- No data is sent to any external service during normal operation
- The only network calls are Ollama model downloads (
ollama pull …) during setup recall.dblives in%APPDATA%\recall\and is never transmitted anywhere
Requires .NET 8 SDK.
dotnet publish Recall.Cli/Recall.Cli.csproj `
-c Release `
-r win-x64 `
--self-contained true `
-p:PublishSingleFile=false `
-o ./publishThe post-publish step copies libs\ and appsettings.json into ./publish automatically.
| Role | Default | Notes |
|---|---|---|
| Embeddings | nomic-embed-text (768-dim) |
Required. Do not change — chunk vectors in the DB are tied to this model's dimensions. |
| Chat | qwen3:14b |
Change freely. Any Ollama model works. |
To use a different chat model, edit appsettings.json → Ollama.ChatModel and restart.
# Example: switch to a smaller model
ollama pull qwen3:8b
# then set "ChatModel": "qwen3:8b" in appsettings.jsonIf you change the embedding model, delete
recall.dband re-ingest all files — embeddings from different models are not compatible.
{
"Recall": {
"DbPath": "%APPDATA%\\recall\\recall.db",
"Vec0DllPath": "libs\\vec0.dll",
"EverythingDllPath": "libs\\Everything64.dll",
"SearchPaths": []
},
"Ollama": {
"BaseUrl": "http://localhost:11434",
"EmbeddingModel": "nomic-embed-text",
"ChatModel": "qwen3:14b",
"ChatContextWindow": 8192
},
"Ingestion": {
"ChunkSize": 512,
"ChunkOverlap": 100,
"MaxExtractedCharsPerFile": 500000
},
"Retrieval": {
"TopK": 5,
"MaxDistance": 1.0,
"MaxContextChars": 6000
}
}SearchPaths is populated by /setup. %APPDATA% and %USERPROFILE% are expanded at runtime everywhere.
James S. K. Makumbi