Skip to content
This repository was archived by the owner on Aug 2, 2026. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
app/.build/**/*.pkg filter=lfs diff=lfs merge=lfs -text
app/.build/**/*.pyz filter=lfs diff=lfs merge=lfs -text
30 changes: 30 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<claude-mem-context>
# Memory Context

# [Recall/kampala] recent context, 2026-04-29 10:42pm PDT

Legend: 🎯session 🔴bugfix 🟣feature 🔄refactor ✅change 🔵discovery ⚖️decision 🚨security_alert 🔐security_note
Format: ID TIME TYPE TITLE
Fetch details: get_observations([IDs]) | Search: mem-search skill

Stats: 13 obs (5,180t read) | 214,948t work | 98% savings

### Apr 20, 2026
7 10:24a ⚖️ Recall/Mumbai App — Full-Solution Expansion Prompt Requested
8 " 🔵 Recall/Mumbai — Existing Architecture Bottlenecks Confirmed
9 " ✅ Plan File Repurposed as Full Product Vision Master Prompt
12 11:54a ⚖️ Recall — Full Product Vision Defined as Agent Build Prompt
13 " 🟣 Phase 1A — Local AI Captioning Module Designed (captioner.py)
14 " 🟣 Phase 1B–1C — Concurrent Ingest + FastAPI Daemon Architecture Designed
15 " 🟣 Phase 2 — Six Source Connectors Designed with BaseConnector Interface
16 " 🟣 Phase 1D + Phase 3 — Raycast HTTP Client Rewrite and Source-Filter UX Designed
17 " ✅ New Dependencies Added to pyproject.toml for All Phases
### Apr 23, 2026
36 8:10p ⚖️ Recall App UX Overhaul — Research Phase Initiated
S9 Recall App UX Overhaul — Research Phase Initiated (Apr 23 at 8:10 PM)
37 8:15p 🔴 Recall Branding — Removed All "Trayce" and "vector-embedded-finder" User-Facing References
38 8:16p 🟣 recall doctor — Health-Check Subcommand Planned and Dispatched for Implementation
39 8:17p 🟣 recall doctor — Health-Check Subcommand Implemented in CLI

Access 215k tokens of past work via get_observations([IDs]) or mem-search skill.
</claude-mem-context>
79 changes: 79 additions & 0 deletions Formula/recall.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
class Recall < Formula
include Language::Python::Virtualenv

desc "Local semantic search across your files, email, calendar, and notes"
homepage "https://github.com/aayu22809/Recall"
url "https://github.com/aayu22809/Recall/archive/refs/tags/v0.3.0.tar.gz"
sha256 "PLACEHOLDER_SHA256"
license "MIT"

depends_on "python@3.11"

# Core runtime dependencies
resource "chromadb" do
url "https://files.pythonhosted.org/packages/source/c/chromadb/chromadb-0.6.0.tar.gz"
sha256 "PLACEHOLDER"
end

resource "fastapi" do
url "https://files.pythonhosted.org/packages/source/f/fastapi/fastapi-0.115.0.tar.gz"
sha256 "PLACEHOLDER"
end

resource "uvicorn" do
url "https://files.pythonhosted.org/packages/source/u/uvicorn/uvicorn-0.30.0.tar.gz"
sha256 "PLACEHOLDER"
end

resource "httpx" do
url "https://files.pythonhosted.org/packages/source/h/httpx/httpx-0.27.0.tar.gz"
sha256 "PLACEHOLDER"
end

resource "python-dotenv" do
url "https://files.pythonhosted.org/packages/source/p/python-dotenv/python_dotenv-1.0.1.tar.gz"
sha256 "PLACEHOLDER"
end

resource "watchdog" do
url "https://files.pythonhosted.org/packages/source/w/watchdog/watchdog-4.0.0.tar.gz"
sha256 "PLACEHOLDER"
end

resource "psutil" do
url "https://files.pythonhosted.org/packages/source/p/psutil/psutil-5.9.8.tar.gz"
sha256 "PLACEHOLDER"
end

resource "rich" do
url "https://files.pythonhosted.org/packages/source/r/rich/rich-13.7.1.tar.gz"
sha256 "PLACEHOLDER"
end

resource "pypdf" do
url "https://files.pythonhosted.org/packages/source/p/pypdf/pypdf-4.1.0.tar.gz"
sha256 "PLACEHOLDER"
end

def install
virtualenv_install_with_resources
end

def post_install
ohai "Recall installed!"
ohai "Next steps:"
puts " 1. Run: recall doctor # check your setup"
puts " 2. Run: vef-setup # interactive setup wizard"
puts " 3. Run: recall start # start the daemon"
puts " 4. Run: recall index ~/Documents # index your files"
puts " 5. Open Raycast and search for 'Recall'"
puts ""
puts " For embedding (pick one):"
puts " Gemini (free): add GEMINI_API_KEY=... to ~/.vef/.env"
puts " Ollama (local): brew install ollama && ollama pull nomic-embed-text"
end

test do
system bin/"recall", "--help"
Comment on lines +2 to +77

Copilot AI Apr 27, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This Homebrew formula still contains placeholder SHA256 values (and points at a v0.3.0 tarball). As-is it won’t install or pass brew audit. If this is meant to be mergeable scaffolding, consider either filling in the real version+sha256 (including all resources) or moving it to docs/notes until release packaging is finalized.

Suggested change
include Language::Python::Virtualenv
desc "Local semantic search across your files, email, calendar, and notes"
homepage "https://github.com/aayu22809/Recall"
url "https://github.com/aayu22809/Recall/archive/refs/tags/v0.3.0.tar.gz"
sha256 "PLACEHOLDER_SHA256"
license "MIT"
depends_on "python@3.11"
# Core runtime dependencies
resource "chromadb" do
url "https://files.pythonhosted.org/packages/source/c/chromadb/chromadb-0.6.0.tar.gz"
sha256 "PLACEHOLDER"
end
resource "fastapi" do
url "https://files.pythonhosted.org/packages/source/f/fastapi/fastapi-0.115.0.tar.gz"
sha256 "PLACEHOLDER"
end
resource "uvicorn" do
url "https://files.pythonhosted.org/packages/source/u/uvicorn/uvicorn-0.30.0.tar.gz"
sha256 "PLACEHOLDER"
end
resource "httpx" do
url "https://files.pythonhosted.org/packages/source/h/httpx/httpx-0.27.0.tar.gz"
sha256 "PLACEHOLDER"
end
resource "python-dotenv" do
url "https://files.pythonhosted.org/packages/source/p/python-dotenv/python_dotenv-1.0.1.tar.gz"
sha256 "PLACEHOLDER"
end
resource "watchdog" do
url "https://files.pythonhosted.org/packages/source/w/watchdog/watchdog-4.0.0.tar.gz"
sha256 "PLACEHOLDER"
end
resource "psutil" do
url "https://files.pythonhosted.org/packages/source/p/psutil/psutil-5.9.8.tar.gz"
sha256 "PLACEHOLDER"
end
resource "rich" do
url "https://files.pythonhosted.org/packages/source/r/rich/rich-13.7.1.tar.gz"
sha256 "PLACEHOLDER"
end
resource "pypdf" do
url "https://files.pythonhosted.org/packages/source/p/pypdf/pypdf-4.1.0.tar.gz"
sha256 "PLACEHOLDER"
end
def install
virtualenv_install_with_resources
end
def post_install
ohai "Recall installed!"
ohai "Next steps:"
puts " 1. Run: recall doctor # check your setup"
puts " 2. Run: vef-setup # interactive setup wizard"
puts " 3. Run: recall start # start the daemon"
puts " 4. Run: recall index ~/Documents # index your files"
puts " 5. Open Raycast and search for 'Recall'"
puts ""
puts " For embedding (pick one):"
puts " Gemini (free): add GEMINI_API_KEY=... to ~/.vef/.env"
puts " Ollama (local): brew install ollama && ollama pull nomic-embed-text"
end
test do
system bin/"recall", "--help"
desc "Local semantic search across your files, email, calendar, and notes"
homepage "https://github.com/aayu22809/Recall"
url "https://github.com/aayu22809/Recall/archive/refs/tags/v0.3.0.tar.gz"
license "MIT"
disable! date: "2026-04-27", because: "release packaging is not finalized; replace placeholder source/resource SHA256 values before enabling this formula"
def install
odie <<~EOS
Recall Homebrew packaging is not finalized.
Replace the placeholder SHA256 values for the release tarball and all Python resources
before enabling this formula.
EOS
end
test do
assert true

Copilot uses AI. Check for mistakes.
end
end
20 changes: 14 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<h1 align="center">Recall</h1>
<p align="center"><em>Your local second brain — one search box for every file, email, calendar event, and assignment. Nothing leaves your machine.</em></p>
<p align="center"><em>One search box for your files, email, calendar, and notes — running entirely on your Mac.</em></p>

<p align="center">
<img alt="platform" src="https://img.shields.io/badge/platform-macOS-111?style=flat-square">
Expand All @@ -9,14 +9,22 @@
<img alt="mcp" src="https://img.shields.io/badge/MCP-compatible-8A2BE2?style=flat-square">
</p>

![System architecture](docs/figures/fig4_architecture.png)
Recall is a background daemon that indexes your **files, Gmail, Google Calendar, Google Drive, Canvas/Schoology, Notion, and cal.ai** into a local vector database on your Mac. Search everything from Raycast, the `recall` CLI, or any MCP client. No data leaves your machine.

Recall is a persistent background daemon that indexes **your files, Gmail, Google Calendar, Google Drive, cal.ai, Canvas / Schoology, and Notion** into a single local vector database. A Raycast extension, a `recall` CLI, and an MCP server all query the same in-process index over loopback HTTP.
```
recall search "meeting notes from last week"
recall search "golden gate bridge photo"
recall search "python async generator example"
```

- **Local-first.** Embeddings, vectors, and OAuth tokens live on disk. The only outbound traffic is your chosen embedding provider (or zero, if you run [Ollama](https://ollama.ai) locally).
- **One search box, everything.** Gmail thread, PDF in `~/Downloads`, assignment posted in Canvas, meeting on your calendar — same query, same ranking.
- **Private.** Embeddings and tokens live on disk. The only outbound call is to your embedding provider — or zero, if you run [Ollama](https://ollama.ai) locally.
- **Fast.** Sub-200 ms semantic search over 1,000+ documents on an M-series Mac.
- **Boring.** The daemon starts in under 4 s, ignores duplicate files via SHA-256, and gets out of the way when you're actively using the machine.
- **Unobtrusive.** Backs off when you're actively using the machine; ignores duplicates via SHA-256 hashing.
- **Not screen recording.** Recall indexes discrete artifacts (files, emails, events) — not your screen or microphone.

### Why local-first?

Cloud search tools (Notion AI, Mem, etc.) send your content to third-party AI providers for indexing and query processing. Recall does not. Your index is a folder on your disk — delete it with `rm -rf ~/.vef/chroma` to start over. No account deletion forms, no retention windows, no training on your data.

<p align="center">
<img src="docs/figures/fig3_latency.png" width="70%" alt="Search latency benchmark">
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# -*- mode: python ; coding: utf-8 -*-
from PyInstaller.utils.hooks import collect_data_files
from PyInstaller.utils.hooks import collect_all

datas = []
binaries = []
hiddenimports = ['vector_embedded_finder.daemon', 'vector_embedded_finder.connectors.gmail', 'vector_embedded_finder.connectors.gcal', 'vector_embedded_finder.connectors.gdrive', 'vector_embedded_finder.connectors.calai', 'vector_embedded_finder.connectors.canvas', 'vector_embedded_finder.connectors.schoology', 'vector_embedded_finder.connectors.notion']
datas += collect_data_files('chromadb')
datas += collect_data_files('google')
datas += collect_data_files('faster_whisper')
tmp_ret = collect_all('chromadb')
datas += tmp_ret[0]; binaries += tmp_ret[1]; hiddenimports += tmp_ret[2]
tmp_ret = collect_all('rfc3987_syntax')
datas += tmp_ret[0]; binaries += tmp_ret[1]; hiddenimports += tmp_ret[2]


a = Analysis(
['../../../vector_embedded_finder/_sidecar_entry.py'],
pathex=[],
binaries=binaries,
datas=datas,
hiddenimports=hiddenimports,
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
noarchive=False,
optimize=0,
)
pyz = PYZ(a.pure)

exe = EXE(
pyz,
a.scripts,
a.binaries,
a.datas,
[],
name='recall-daemon-aarch64-apple-darwin',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=True,
disable_windowed_traceback=False,
argv_emulation=False,
target_arch='arm64',
codesign_identity=None,
entitlements_file=None,
)
Loading