# A local-first memory daemon for AI agents: SQLite + ONNX, zero API calls

> Source: <https://dev.to/everest_an/a-local-first-memory-daemon-for-ai-agents-sqlite-onnx-zero-api-calls-2ahk>
> Published: 2026-08-23 04:47:13+00:00

Cloud memory tiers have a fundamental problem: your agent context - the most sensitive data you have - leaves your machine. I wanted memory that never does.

So Awareness runs a local-first daemon:

```
npx @awareness.market/local start
```

No account. No API key. No cloud. SQLite + ONNX embeddings on your machine, served to Claude Code, Cursor, or any MCP client on localhost.

| Storage | SQLite, human-readable, yours forever |
| Embeddings | all-MiniLM-L6-v2 as ONNX (23MB) - zero API calls |
| Retrieval | hybrid BM25 + vector RRF - 1.7s per query on an M1 8GB |
| Memory types | knowledge cards, bi-temporal facts, conflict detection |
| Upgrade path | optional cloud sync to pgvector when you want team sharing |

Three things a cloud memory tier can never give you:

95.6% recall@5 on LongMemEval_S, on an M1 with 8GB RAM and zero LLM calls at retrieval. Two competitors edge us by ~1 point on recall, running hosted stacks. Full methodology with the tables we do not win:

[https://awareness.market/benchmarks](https://awareness.market/benchmarks)

Local-first does not mean local-only. Burst inference, team-shared memories, and cross-device sync are real needs - the daemon upgrades to cloud (pgvector) with one command when you need it. The point is that local is the default, not the fallback.

Repo and SDK: [https://github.com/everest-an/Awareness](https://github.com/everest-an/Awareness)

What would make you switch your agent memory to local-first?
