GET /healthLiveness probe for the data-plane listener.
typed memory over FFS
Append tool calls, decisions, retrieval traces, and derived facts into isolated FFS files. Search by embedding, filter with Cypher, and keep SOURCE_FROM provenance next to the event.
memspine keeps the append log, vector index, and provenance graph in the same tenant-owned file set, so recall can answer what matched and where it came from.
Quickstart
The installer puts memspine-server and memspine-admin in ~/.local/bin. Linux x86_64 and macOS arm64 builds are checksum-verified and run without root.
$ curl -fsSL https://memspine.com/install.sh | sh
Checksum OK.
Installed memspine-server and memspine-admin to ~/.local/bin
$ MEMSPINE_BIND=0.0.0.0:7777 memspine-server &
$ curl localhost:7777/health
{"status":"ok","service":"memspine-server","version":"0.0.0"}
# embeddings default to 384 dims; pin to 4 for this walkthrough
$ MEMSPINE_EMBEDDING_DIM=4 memspine-server
$ curl -X POST localhost:7777/v1/memory/event \
-H "Authorization: Bearer 00000000-0000-0000-0000-000000000042" \
-H "Content-Type: application/json" \
-d '{"kind":"tool_call","embedding":[0.1,0.2,0.3,0.4],
"properties":{"name":"web.fetch","url":"https://example.com"}}'
$ curl -X POST localhost:7777/v1/memory/cypher \
-H "Authorization: Bearer 00000000-0000-0000-0000-000000000042" \
-H "Content-Type: application/json" \
-d '{"query":"MATCH (n:Event)-[:SOURCE_FROM]->(m:Event) RETURN count(n)"}'
API
Auth is Authorization: Bearer <key>. Every handler checks the resolved tenant and the key scope. Writes accept Idempotency-Key; SDKs ship for Rust, Python, and TypeScript.
GET /healthLiveness probe for the data-plane listener.
GET /metricsPrometheus exposition with per-tenant series.
GET /v1/whoamireadReturn the tenant resolved from the bearer key.
POST /v1/memory/eventwriteAppend a typed event plus optional embedding.
POST /v1/memory/searchreadSearch HNSW vectors with an optional Cypher predicate.
POST /v1/memory/cypherreadTraverse events and SOURCE_FROM edges.
POST /v1/admin/tenantsadminCreate a tenant in the control plane.
POST /v1/admin/keysadminMint a scoped key, with plaintext returned once.
Architecture
FFS handles pages, WAL, MVCC, HNSW, and atomic graph/vector commits. memspine wraps it in the service layer an agent fleet needs.
That layer is tenancy, key scopes, rate limits, quotas, metrics, trace ids, and an admin audit log.
Operations
Every response carries a trace id. Metrics are per tenant. Token buckets isolate runaway callers. Admin changes append to an audit log.
Every response carries x-memspine-trace-id, caller-supplied or generated, and the same id is on every span.
/metrics exposes write rate, query latency, storage growth, and vector-index churn per tenant.
Per-tenant token buckets keep a runaway agent from taking down its neighbours or silently burning capacity.
Admin actions append to an immutable log, paginated over the API.
FAQ
Agent memory is not just semantic similarity. It is a durable event graph with enough context for recall, debugging, and source tracing.
The durable record of tool calls, decisions, retrieval traces, and derived facts.
A vector database answers what is similar. Agent memory also needs what happened and where it came from.
Yes. It is a plain HTTP API with Bearer-token auth. Anything that can make an HTTP request can append and search memory.
Yes. One command installs a single Rust binary with no dependencies. Each tenant's data lives in its own FFS file.
Status
The HTTP surface, scopes, rate limits, admin plane, audit log, vector search, edge traversal, and FFS storage path work end to end, gated by CI on every push. The v0 executor returns node ids and counts; richer Cypher projections arrive with the FFS columnar read path. Running an agent fleet and want memory under it? Get in touch via erp.ai.