Open Source · Self-Hosted · Privacy-First · Local by Default

Every agent. One memory.
Total recall.

A self-hosted personal memory layer for AI agents — built on SQLite or Postgres, on-device embeddings and MCP.
Runs 100% local by default. No API keys. No cloud dependency. Your data never leaves your machine.
You are a software developer? ✦ Try Aperio-dev — basic terminal comfort is required.
You are a normal human? ✦ Try Aperio-lite — double-click and go, no tech skills needed.

Postgres 16 SQLite Local Embeddings MCP Protocol llama.cpp
aperio — local · private · yours
🤖 Provider: llama.cpp (qwen3:4b)
Connected to Aperio database
pgvector enabled — semantic search active (16/16 memories embedded)
🧠 Aperio MCP server v2.0 running
MCP server connected
 
You what's my preferred stack?
 
[recall] searching memories… cosine similarity 0.94
 
A Based on your memories:
   › Language: TypeScript
   › Backend: Node · Postgres · Docker
   › Editor: Cursor with MCP enabled
 
You remember I switched to pnpm
 
🔭 Listening on port 31337 — the original l33t port. Famous in the 90s, introduced by the group 'Cult of the Dead Cow' in 1998, a ghost town on modern machines today. Ours now. Too iconic not to use! He-he ;/
54
MCP Tools
9
Memory Types
0
API Keys Required
$0
Vendor Lock-in
Features

Everything you need.
Nothing you don't.

Built for developers who want AI that actually knows them. Without giving up their data or their infrastructure.

Persistent Memory

Your memories survive every conversation, every tool, every session. 9 structured types keep things organized — facts, preferences, decisions, solutions and more. Three sensitivity tiers keep your private data safe: tier 1 shared as-is, tier 2 PII-redacted on cloud, tier 3 never leaves your machine.

Agent Self-Memory

The AI keeps its own private notebook — walled off from your memories. It learns what works, remembers your style, and carries its own observations across every session.

Semantic Search

Powered by on-device embeddings (mxbai-embed-large) over sqlite-vec or pgvector. Ask about your projects and get results matched by meaning, not keywords. Voyage AI optional.

MCP Native

One brain shared across every agent. Claude, Cursor, Windsurf — all connect to the same Postgres database through the MCP protocol.

Real-time Streaming

Responses stream token by token via WebSocket. Live code rendering, markdown on completion, smart auto-scroll. No waiting.

Local by Default

Runs fully on your machine with llama.cpp — free, private, offline-capable. Switch to Claude with one env variable when you need more power.

Auto Deduplication

Background job finds near-duplicate memories every 10 minutes using cosine similarity. Dry-run by default — you stay in control.

Reasoning Models

Native support for thinking models like qwen3, gemma4 and llama3 — and cloud models reason out of the box. A collapsible reasoning bubble shows the model's thought process live. Toggle it on or off anytime.

Toggle Discuss and two agents cross-review each other until they agree. Domain characters give each a different perspective.

learn more...

Connect SQLite, Postgres or MySQL and ask in plain English. Aperio writes the SQL — reads run instantly, and any change to your data asks you to confirm first.

learn more...
Team Ready coming soon

Since you own the database, Aperio scales from personal to shared team brain with two changes — update the system prompt and seed team memories. One brain for the whole team.

Architecture

Simple stack. Serious power.

One database. One MCP server. Two AI providers. Your brain is just a Postgres table with vectors.

aperio / system architecture
🌐
Web UI
localhost:31337 · 4 themes · streaming
↕ WebSocket
Express Server
server.js · agent loop
↕ stdio
🔧
MCP Server
mcp/index.js · 54 tools · 12 categories
🐘
SQLite (default) · Postgres 16 + pgvector
sqlite-vec · pgvector · HNSW index
Local Embeddings
mxbai-embed-large-v1 · 1024 dims · zero external calls
Voyage AI
optional · voyage-3 · 1024 dims · cloud upgrade
llama.cpp
default · local · free · offline capable
Claude · Gemini · DeepSeek
optional · cloud APIs
🤖
Claude Code · Codex CLI
optional · coding agents
factpreference projectdecision solutionsourcepersoninferenceworkflow
MCP Tools

54 tools. One protocol.

Each one is available to any MCP-compatible agent (Claude, Cursor, Windsurf).

Memory6 tools
remember
Save a new memory — auto-generates embedding for semantic retrieval
recall
Semantic search with cosine similarity, FTS fallback
update_memory
Edit by UUID — new version, old tombstoned
forget
Delete a specific memory by UUID
backfill_embeddings
Batch-generate embeddings for unembedded memories
deduplicate_memories
Find near-duplicates via cosine similarity
Self-Memory4 tools
self_remember
Agent saves a note to its own private store — walled off from user memories
self_recall
Agent searches its own notes semantically or by full-text
self_update
Agent revises one of its own notes in-place
self_forget
Agent deletes one of its own notes
Files9 tools
read_file
Read any file from disk (max 500 lines)
write_file
Create or overwrite a file
append_file
Append content to end of file
edit_file
Search-and-replace in an existing file
read_docx
Read and extract text from .docx files
scan_project
Scan folder tree up to 3 levels deep
delete_file
Delete a file by path
generate_xlsx
Create Excel spreadsheets from data
generate_docx
Create Word documents programmatically
Wiki4 tools
wiki_write
Create or update a cited wiki article from memories
wiki_search
Hybrid FTS + semantic search across wiki articles
wiki_list
Browse wiki articles, newest first
wiki_get
Fetch a wiki article by slug with revision info
Code Graph6 tools
code_search
Search indexed code symbols by name or doc text
code_repos
List all indexed repos with symbol counts
code_outline
List every symbol in a file with line ranges
code_context
Fetch source slice for a symbol by qualified name
code_callers
Find symbols that call the given target
code_callees
Find symbols called by the given target
Doc Graph5 tools
doc_search
Search indexed document passages by meaning
doc_repos
List all indexed doc folders with chunk counts
doc_outline
Section tree (TOC) for one document
doc_context
Fetch text of one section or chunk
doc_refs
Cross-document reference lookup (IDs, URLs, citations)
Shell4 tools
run_node_script
Execute Node.js scripts in a sandbox
run_python_script
Execute Python scripts in a sandbox
syntax_check
Validate code syntax for supported languages
run_shell
Execute shell commands with output capture
Web2 tools
fetch_url
Fetch a URL, strip HTML, truncate to 15k chars
web_search
Search the web via DuckDuckGo, return ranked results
Image3 tools
read_image
Read and OCR-extract text from images
preprocess_image
Optimize image for local vision models
describe_image
Generate a text description of an image
GitHub5 tools
fetch_github_issue
Read a GitHub issue with comments and metadata
create_github_issue
Open a new issue on a GitHub repository
update_github_issue
Edit an existing GitHub issue
list_github_issues
List open issues for triage across repos
record_issue_triage
Record a triage verdict for an issue
Data2 tools
export_data
Export memories & wiki to a portable JSON file
import_data
Import memories & wiki from an export file
Database4 tools
db_connections
List available database connections (never exposes credentials)
db_schema
Introspect tables, columns, indexes, and foreign keys
db_query
Run ONE read-only SQL statement with parameterized bindings
db_execute
Propose a write/DDL statement — confirm-before-write flow
Extensibility

Build on top.
Make it yours.

Aperio is a foundation, not a finished product. The source is fully open — fork it, extend it, repurpose it.
Here's what you can build on top.

Memory Layer
Custom Memory Types

The schema is yours to extend. Add new memory types, extra metadata columns, TTL logic, or per-project namespacing. Postgres gives you full flexibility.

mood_log habit_tracker meeting_note code_snippet bookmark
MCP Layer
New MCP Tools

Adding a tool is just a new entry in mcp/index.js. Expose calendar access, email drafting, browser control — any action you want your agents to take.

calendar_tool send_email run_tests git_commit deploy
AI Layer
Swap the Embedding Model

mxbai-embed-large runs on-device via transformers by default — zero external calls. Swap in Voyage AI for higher quality, or drop in OpenAI, Cohere, or any provider with a vectors API.

openai/text-embedding-3 cohere-embed nomic-embed-text
UI Layer
Replace or Extend the UI

The web interface is a standalone HTML file with WebSocket. Rip it out and build a VS Code extension, a mobile app, a CLI, a Chrome sidebar — the server API stays the same.

vscode extension raycast plugin mobile app chrome sidebar
Data Layer
Memory Analytics & Insights

Query your own memory graph. Build dashboards showing what topics you think about most, decision patterns over time, knowledge gaps, or memory growth by week.

knowledge graph memory heatmap topic clusters decay scoring
Team Layer
Team Shared Memory

Since you own the database, Aperio scales from personal to team brain with two changes: update the system prompt to team context, seed team memories in 001_init.sql.

shared decisions project knowledge onboarding runbooks
Agent Layer
Multi-Agent Memory Sharing

Run multiple specialized agents that all share one brain. A research agent stores findings, a coding agent reads context, a writing agent pulls preferences — all from the same database.

research agent coding agent shared context team memory
Agent Layer
Background Agents

Scheduled, autonomous agents that run without a chat turn. Define jobs in the database, set interval or file-watcher triggers, and let them handle deduplication, wiki refresh, code indexing — silently, in the background.

scheduled jobs file watchers auto dedup wiki refresh
Got an idea? Build it and share it.
Open a PR, open an issue, or fork it and take it somewhere new. Aperio is a starting point.
Fork on GitHub
Why Aperio

Your data. Your rules.

Commercial memory services are great products.
Aperio is a different choice — self-hosted, open source, fully customizable.

Feature ✦ Aperio Cloud Services
Data ownership 100% yours — own Postgres Vendor's servers
Monthly cost Free (self-hosted) $20–100 / month
Local AI support llama.cpp built-in Cloud only
File system tools read · write · append Not available
Full source access Open source — fork it Closed API
MCP integration Native protocol Varies
Works offline With llama.cpp Requires internet
Non-developer friendly Aperio-lite — double-click & go Requires dev setup
Team memory Shared DB — one brain for the team Varies by plan
Web UI

See it in action.

Local AI · persistent memory · streaming responses · 4 themes.

Quick Start

Up in 5 minutes.

Three ways in — pick your comfort level. Everything runs 100% local by default: no API keys, no cloud.

1 · Aperio-lite
No code, no terminal. Download → unzip → double-click. A browser wizard installs everything and picks a model that fits your machine.
2 · One command
# clones the release branch → starts Aperio
curl -fsSL https://raw.githubusercontent.com/BaiGanio/aperio/release/.github/lite/install.sh | bash
 
# re-run anytime to update in place —
# your memory database is preserved
3 · From source
Full control — clone the dev branch and run it yourself. Node 18+; SQLite by default, Postgres optional. Step-by-step below.
Method 3 · From source
01
Clone & install dependencies
# dedicated developer branch - no extra files
git clone --depth 1 -b dev https://github.com/BaiGanio/aperio.git
cd aperio
 
# install dependencies
npm install
02
Ready for use .env.example in the project folder
AI_PROVIDER=llamacpp
LLAMACPP_MODEL=Qwen/Qwen2.5-3B-Instruct-GGUF:Q4_K_M
EMBEDDING_PROVIDER=transformers
# DB_BACKEND auto-detects: SQLite (default) or Postgres
# DATABASE_URL=postgresql://… — only if you choose Postgres
03
Databases
# default: SQLite + sqlite-vec — nothing to install
npm run migrate:sqlite
 
# optional: Postgres + pgvector instead
cd docker && docker compose up -d && cd ..
npm run migrate
04
Pick a model — nothing to install
# Aperio vendors + starts the llama.cpp engine itself — downloads the model on first use
 
Available options:
default - Qwen/Qwen2.5-3B-Instruct-GGUF:Q4_K_M (~4GB RAM, ~2GB disk) ★ recommended
medium - ggml-org/gemma-4-E4B-it-GGUF:Q4_K_M (~8GB RAM, ~5GB disk)
smart - ggml-org/gemma-4-12B-it-GGUF:Q4_K_M (~24GB RAM, ~8GB disk)
reasoning - Qwen/Qwen3-30B-A3B-GGUF:Q4_K_M (~48GB RAM, or fast-low-vram profile, ~18GB disk)
 
# embeddings run on-device (transformers) — no model to pull
05
Launch Aperio Web UI
# start from the project root
# opens at localhost:31337
npm run start:local
 
# cloud (Claude) -> localhost:3000
# npm run start:cloud
06
Use Aperio chat in the terminal
# local (llama.cpp)
# auto-detect if any Docker - uses SQLite as fallback
npm run chat:local
 
# cloud (Anthropic)
npm run chat:cloud
✅ Tip: Check out project README.md for extensive documentation, troubleshooting, and advanced configuration options.
Aperio-lite · For non-code humans

Small tool. Big ideas. 🧐
No coding skills required.

The fastest path to your own private AI.
Runs 100% on your machine. No Money. No Cloud. No register your email here and there.
Download → unzip → double-click. That's it.
Double-click Launch macOS Linux Windows Delete to uninstall
the whole flow — once is enough
📥 Download 📂 Unzip 🔗 Make Alias / Shortcut 🖥️ Drop on Desktop Double-click → (one-time) setup Browser opens automatically
macOS
1. Download, unzip, open in Finder
2. START.sh is right at the top level (the how-to folder holds a printable guide)
3. Find START.sh → right-click → Make Alias
4. Rename the alias to Aperio
5.A Drag alias to Desktop folder in Finder's sidebar
❗ Sidebar item — not the Desktop surface itself
5.B Hold ⌥ Option + ⌘ Cmd and drag START.sh directly onto the desktop → rename it there
6. Double-click → one-time setup → done
✅ Default browser opens automatically at
http://localhost:31337
Windows
1. Download, unzip, open in File Explorer
2. START.bat is right at the top level (the how-to folder holds a printable guide)
3. Find START.bat → right-click → Rename
4. Rename the file to Aperio.bat
5.A Move shortcut to Desktop
5.B Hold Alt and drag START.bat directly onto the desktop → rename it there
6. Double-click → one-time setup → done
✅ Default browser opens automatically at
http://localhost:31337
Linux
1. Download, unzip, open in your file manager
2. START.sh is right at the top level (the how-to folder holds a printable guide)
3. Find START.sh → right-click → Properties → Permissions
4. Enable Allow executing file as program → close
5. Right-click START.shCopy to Desktop → rename to Aperio
❗ Menu labels vary by distro (Nautilus, Dolphin, etc.)
6. Double-click → one-time setup → done
✅ Default browser opens automatically at
http://localhost:31337
No tech skills required
Nothing to configure.
✅ No databases to set up.
✅ No config files to edit.
✅ No environment variables.
✅ No package managers.
Just download and double-click.
First run installs everything automatically in the background.
You'll see a terminal window — that's normal.
The terminal is yours GOD EYE on what is happening.
Feature updates
Download the latest release.
✅ Windows
- Right-click on the zip and select "Extract All..."
- In the dialog, specify your aperio-lite folder.
✅ macOS/Linux (Terminal - fastest)
- unzip aperio-lite.zip -d ~/aperio-lite
Installed with the one-liner? Even easier.
Re-run the install command (or git pull in the folder) — it fast-forwards to the latest release and keeps your memory database. No re-download.
Your data stays untouched.
❗ Might want to export your memories first.
- You'll have your data even if the update fails
subsequent runs & Uninstall
Every run after the first run?
Double-click the desktop shortcut. That's it.
Terminal: bash START.sh
✅ If you can open a browser, you can run Aperio.
How to remove it if I do not like it?
1. Delete the Desktop alias / shortcut
2. Delete the unzipped folder
✅ That's it. Completely gone.
- No registry entries. No hidden files.
- No traces. Nothing.
Open source · local by default · free forever

Your AI has been
amnesiac?
Fix that today.

Self-hosted. Takes 5 minutes.

From Latin aperire — to open, to reveal, to bring into the light ✨

Choose your language

drag to pan · scroll to zoom
available coming soon not yet
Don't see yours? Aperio's agent understands you anyway — just write in any language.