A local-first memory sidecar for agent applications
Project description
HotMem
A local-first memory sidecar for agent applications. One SQLite DB. One port: 8711.
HotMem provides fast, queryable working memory with hybrid vector + keyword search. Store facts, retrieve them ranked, and get back LLM-ready message objects you can stitch directly into prompts.
Supports Python 3.11, 3.12, 3.13, and 3.14.
Install
pip install hotmem
# or
uv pip install hotmem
Quick Start
# Start with a mount directory (portable memory)
hotmem serve --mount ./hotmem
# Or just start (uses temp DB)
hotmem serve
CLI
hotmem serve --port 8711 --mount ./data/hotmem
hotmem serve --db ./my.sqlite
hotmem hydrate --file swap.jsonl --db ./my.sqlite
hotmem snapshot --file swap.jsonl --db ./my.sqlite
hotmem status
API
All endpoints under /v1. Default: http://127.0.0.1:8711
GET /v1/health
{"status": "ok", "memory_count": 42, "db_path": "...", "uptime_s": 120.5}
POST /v1/add
{"identifier": "vendor_x", "fact": "Invoice total was $5000", "importance": 0.8}
POST /v1/search
{"query": "duplicate invoice risk", "top_k": 5, "max_chars": 1500}
Returns ranked message objects ready for LLM stitching:
{
"memories": [
{"role": "system", "content": "...", "memory_id": "...", "identifier": "...", "score": 0.87}
],
"count": 5,
"trace_ms": 2.1
}
POST /v1/hydrate
{"file": "swap.jsonl"}
POST /v1/snapshot
{"file": "swap.jsonl"}
Python Client
from hotmem.client import HotMemClient
with HotMemClient("http://127.0.0.1:8711") as client:
client.add("vendor_x", "Invoice total $5000", importance=0.8)
memories = client.search("duplicate invoice risk", top_k=5, max_chars=1500)
# memories are LLM-ready message objects
messages = memories + [{"role": "user", "content": "Analyze this vendor."}]
Mounting
Any directory can be a HotMem mount. The mount contains:
hotmem.sqlite— the databaseswap.jsonl— portable JSONL backupmanifest.json— mount metadata
hotmem serve --mount /mnt/usb/hotmem # portable memory on USB
hotmem serve --mount ./data/hotmem # local project memory
Development
uv sync # install deps
uv run pytest # run tests
uv run ruff check src/ tests/ # lint
uv run ruff format src/ tests/ # format
uv build # build wheel
Architecture
Each source module is self-contained with a docstring header describing its purpose and interface:
| Module | Purpose |
|---|---|
trace.py |
Structured JSON logging |
embed.py |
Hash-based embedder (dim=64) |
db.py |
SQLite storage + cosine similarity UDF |
search.py |
Hybrid ranking (cosine + keyword + importance) |
swap.py |
JSONL hydrate/snapshot |
mount.py |
Portable directory management |
server.py |
FastAPI endpoints |
cli.py |
Click CLI |
client.py |
Python SDK (httpx) |
Every operation emits structured JSON traces to stderr with component tags:
hotmem serve --mount ./data 2>&1 | grep '"component": "search"'
Contributing
See CONTRIBUTING.md for development setup and guidelines.
License
MIT — see LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file hotmem-0.1.6.tar.gz.
File metadata
- Download URL: hotmem-0.1.6.tar.gz
- Upload date:
- Size: 22.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
799f76915aae3f14b1b60b00d1d404b6e1f019f6bfc63b5287621759171a4dbf
|
|
| MD5 |
5420e30ef8ac3933d792353331f35220
|
|
| BLAKE2b-256 |
a0f65028592abb0c94b93a6b645022bf275f3d999f7b051463017d4eb84793ca
|
Provenance
The following attestation bundles were made for hotmem-0.1.6.tar.gz:
Publisher:
release.yml on KnowGuard-AI/HotMem
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
hotmem-0.1.6.tar.gz -
Subject digest:
799f76915aae3f14b1b60b00d1d404b6e1f019f6bfc63b5287621759171a4dbf - Sigstore transparency entry: 1813374995
- Sigstore integration time:
-
Permalink:
KnowGuard-AI/HotMem@818281339e0b40255fe65b22d63a087c33d47dce -
Branch / Tag:
refs/heads/main - Owner: https://github.com/KnowGuard-AI
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@818281339e0b40255fe65b22d63a087c33d47dce -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file hotmem-0.1.6-py3-none-any.whl.
File metadata
- Download URL: hotmem-0.1.6-py3-none-any.whl
- Upload date:
- Size: 19.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
91f6c95791f10ad55cd55932883cd445141d329bb3a2fe631fe4ea2b03643d46
|
|
| MD5 |
b7ac2921504c98dc49caa72d83e38a90
|
|
| BLAKE2b-256 |
9e606e6cd26ea4ef44fe8913addb8fb35cc0d36ec5fd0f1840173a803f96089c
|
Provenance
The following attestation bundles were made for hotmem-0.1.6-py3-none-any.whl:
Publisher:
release.yml on KnowGuard-AI/HotMem
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
hotmem-0.1.6-py3-none-any.whl -
Subject digest:
91f6c95791f10ad55cd55932883cd445141d329bb3a2fe631fe4ea2b03643d46 - Sigstore transparency entry: 1813375297
- Sigstore integration time:
-
Permalink:
KnowGuard-AI/HotMem@818281339e0b40255fe65b22d63a087c33d47dce -
Branch / Tag:
refs/heads/main - Owner: https://github.com/KnowGuard-AI
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@818281339e0b40255fe65b22d63a087c33d47dce -
Trigger Event:
workflow_dispatch
-
Statement type: